缓解 CVE-2018-6389 WordPress 的 load-scripts / load-styles 攻击。
通过 Nginx 拒绝所有对 wp-admin/load-scripts.php 和 wp-admin/load-styles.php 的请求。
太长不看
它 [WordPress] 会使用 load-scripts.php(用于JS)或 load-styles.php(用于CSS文件),浏览器通过单个请求获取多个JS/CSS文件——因此在性能方面这样更好,页面加载更快。此功能仅为管理页面设计,但也用于 wp-login.php 页面,因此这些文件不强制要求认证。
# for example
https://example.com/wp/wp-admin/load-scripts.php?c=1&load[]=jquery-ui-core,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check
# same goes to https://example.com/wp/wp-admin/load-styles.php
单个请求(无需认证)可能导致服务器执行超过180次IO读取,并将所有文件拼接成超过4MB的响应。对于没有适当防火墙和速率限制的小型服务器,这足以执行DoS攻击。
- 你真的应该使用HTTPS。如果你不使用,首先就不应该拥有网站。
- 当你使用HTTPS时,没有理由不使用HTTP/2。
- 使用HTTP/2时,无需拼接文件。这实际上是一种反模式。
-- 如何缓解 CVE-2018-6389 – WordPress 中的 load-scripts.php DoS "攻击"
load-scripts.php 和 load-styles.php 的请求将以下角色添加到 requirements.yml 中:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # Check for latest version!
运行命令:
➜ ansible-galaxy install -r requirements.yml --force
将角色添加到 dev.yml 和 server.yml 中,紧跟在 role: wordpress-setup 之后:
roles:
# some other Trellis roles ...
- { role: wordpress-setup, tags: [wordpress, wordpress-setup, letsencrypt] }
- { role: trellis-cve-2018-6389, tags: [nginx, wordpress, wordpress-setup] }
# some other Trellis roles ...
然后,像往常一样重新配置:
# https://roots.io/trellis/docs/local-development-setup/
➜ vagrant reload --provision
# https://roots.io/trellis/docs/remote-server-setup/
➜ ansible-playbook server.yml -e env=<environment>
禁用拼接:
# config/application.php OR wp-config.php OR equivalent
# normal OR outdated Bedrock:
define('CONCATENATE_SCRIPTS', false);
# Bedrock with roots/wp-config:
Config::define('CONCATENATE_SCRIPTS', false);
然后,像往常一样部署:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# or alternatively
➜ ansible-playbook deploy.yml -e "site=<domain> env=<environment>"
不,你不能在类似 Kinsta 或 WP Engine 的托管主机上使用。
缓解此类攻击是托管公司的职责。
谢谢!很高兴你喜欢。让我的老板知道有人在用这个项目很重要。与其在 wp.org 上给评价,不如考虑:
➜ ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
trellis-cve-2018-6389 是由 Tang Rufus 创建的 Itineris Limited 项目。
特别感谢 Roots 团队,他们的 Trellis 使这个项目成为可能。
完整的贡献者列表请参见此处。
请提供反馈! 我们希望这个库在尽可能多的项目中发挥作用。 请提交一个 issue,指出你喜欢什么、不喜欢什么,或者 fork 项目并提建议。 任何问题都不嫌小。
最近的变化请参见 CHANGELOG。
trellis-cve-2018-6389 采用 MIT 许可证 发布。