szepeviktor / waf4wordpress
WordPress WAF
v0.1.1
2024-07-10 20:37 UTC
Requires
- php: ~7.4.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-10 21:01:56 UTC
README
停止对您的WordPress网站进行现实生活中的攻击,并触发 Fail2Ban。
💡 在使用此WAF之前,您必须清理您的网站,消除所有错误。每天查看您的访问和错误日志,并运行此WAF一周不使用Fail2Ban。
此WAF不会对不寻常的请求给出适当的HTTP响应。它立即阻止攻击IP地址,其目的是以下。
- 防止在后续请求中进一步损害网站
- 防止DoS攻击
共享托管没有全局禁止(由于信任问题),但您仍然可以安装此软件不使用Fail2Ban来阻止攻击,使用Miniban方法之一。
支持我的工作
如果您在代理机构中使用我的包,请考虑每月赞助我。
理论
您的WordPress - 实际上是通用的HTTP - 安全性由以下内容组成。
- 使用HTTPS
- 进行每日备份
- 阻止 已知的敌对网络
- 安装Fail2Ban(控制防火墙)
- 维护您的网站并使用 严格的Fail2Ban过滤器,在第一次可疑请求时立即禁止
- 拒绝直接访问核心WordPress文件、主题和插件
- 安装WordPress WAF(本项目)
- 使用 Leanmail 过滤Fail2Ban通知电子邮件
在我的其他存储库中查看 Block WordPress attack vectors 的说明,以了解主题概述。
Composer安装
从技术上讲,这既不是WordPress插件也不是MU插件。WordPress WAF作为Composer包分发和自动加载。
- 执行
composer require szepeviktor/waf4wordpress
命令 - 从您的
wp-config
加载vendor/autoload.php
- 在
wp-config
中早期实例化SzepeViktor\WordPress\Waf\HttpAnalyzer
类require dirname(__DIR__) . '/vendor/autoload.php'; new SzepeViktor\WordPress\Waf\HttpAnalyzer();
- 在
wp-content/mu-plugins/waf4wordpress.php
中创建一个MU插件<?php /* * Plugin Name: WAF for WordPress (MU) */ if (! function_exists('add_filter')) { exit; } new SzepeViktor\WordPress\Waf\CoreEvents();
手动安装
💡 请参阅 Composer-managed WordPress 了解如何使用Composer管理WordPress。
从技术上讲,这既不是WordPress插件也不是MU插件。
- 首先下载 WAF for WordPress,然后将其文件解压缩到目录中,例如
waf/
- 在
wp-config
中早期实例化SzepeViktor\WordPress\Waf\HttpAnalyzer
类require_once __DIR__ . '/waf/src/HttpAnalyzer.php'; require_once __DIR__ . '/waf/src/CoreEvents.php'; new SzepeViktor\WordPress\Waf\HttpAnalyzer();
- 在
wp-content/mu-plugins/waf4wordpress.php
中创建一个MU插件<?php /* * Plugin Name: WAF for WordPress (MU) */ if (! function_exists('add_filter')) { exit; } new SzepeViktor\WordPress\Waf\CoreEvents();
配置
在类实例化之前,在 wp-config
中配置WordPress WAF。
为Fail2Ban创建自定义过滤器以捕获这些PHP消息。
- 可能恶意请求:
Malicious traffic detected:
可能每10分钟尝试6次后禁止 - 确定是入侵尝试:
Break-in attempt detected:
可能立即禁止
如何在编写不良的插件中支持PayPal IPN、Braintree和自定义入口点
将此复制到您的 wp-config.php
中。
// Enable PayPal IPN in WooCommerce if ( isset( $_SERVER['REQUEST_URI'] ) ) { if ( '/wc-api/WC_Gateway_Paypal/' === parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) ) { // PayPal IPN does not send Accept: and User-Agent: headers $_SERVER['HTTP_ACCEPT'] = '*/*'; $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 PayPal/IPN'; } } // Enable Braintree Webhooks new \Waf4WordPress\Braintree_Fix( '/braintree/webhook' ); // Enable email opens in Newsletter plugin if ( isset( $_SERVER['REQUEST_URI'] ) ) { $newsletter_path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); if ( '/wp-content/plugins/newsletter/statistics/open.php' === $newsletter_path || '/wp-content/plugins/newsletter/statistics/link.php' === $newsletter_path ) { // UA hack for old email clients $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 ' . $_SERVER['HTTP_USER_AGENT']; } unset( $newsletter_path ); } // Enable email open tracking in ALO EasyMail Newsletter plugin if ( isset( $_SERVER['REQUEST_URI'] ) ) { $alo_path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); if ( '/wp-content/plugins/alo-easymail/tr.php' === $alo_path ) { // UA hack for old email clients $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 ' . $_SERVER['HTTP_USER_AGENT']; } unset( $alo_path ); }
错误报告和功能请求
脚本小子寻找WordPress的地方
/backup/
/blog/
/cms/
/demo/
/dev/
/home/
/main/
/new/
/old/
/portal/
/site/
/test/
/tmp/
/web/
/wordpress/
/wp/
最好不要创建这些目录,以避免日志摘录过长。