szepeviktor/waf4wordpress

v0.1.1 2024-07-10 20:37 UTC

This package is auto-updated.

Last update: 2024-09-10 21:01:56 UTC


README

License PHP Version Packagist stats Latest version PHPStan enabled

停止对您的WordPress网站进行现实生活中的攻击,并触发 Fail2Ban

💡 在使用此WAF之前,您必须清理您的网站,消除所有错误。每天查看您的访问和错误日志,并运行此WAF一周不使用Fail2Ban。

此WAF不会对不寻常的请求给出适当的HTTP响应。它立即阻止攻击IP地址,其目的是以下。

  1. 防止在后续请求中进一步损害网站
  2. 防止DoS攻击

共享托管没有全局禁止(由于信任问题),但您仍然可以安装此软件不使用Fail2Ban来阻止攻击,使用Miniban方法之一。

支持我的工作

如果您在代理机构中使用我的包,请考虑每月赞助我。

Sponsor

理论

您的WordPress - 实际上是通用的HTTP - 安全性由以下内容组成。

  1. 使用HTTPS
  2. 进行每日备份
  3. 阻止 已知的敌对网络
  4. 安装Fail2Ban(控制防火墙)
  5. 维护您的网站并使用 严格的Fail2Ban过滤器,在第一次可疑请求时立即禁止
  6. 拒绝直接访问核心WordPress文件、主题和插件
  7. 安装WordPress WAF(本项目)
  8. 使用 Leanmail 过滤Fail2Ban通知电子邮件

在我的其他存储库中查看 Block WordPress attack vectors 的说明,以了解主题概述。

Composer安装

从技术上讲,这既不是WordPress插件也不是MU插件。WordPress WAF作为Composer包分发和自动加载。

  1. 执行 composer require szepeviktor/waf4wordpress 命令
  2. 从您的 wp-config 加载 vendor/autoload.php
  3. wp-config 中早期实例化 SzepeViktor\WordPress\Waf\HttpAnalyzer
    require dirname(__DIR__) . '/vendor/autoload.php';
    new SzepeViktor\WordPress\Waf\HttpAnalyzer();
  4. 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插件。

  1. 首先下载 WAF for WordPress,然后将其文件解压缩到目录中,例如 waf/
  2. 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();
  3. 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/

最好不要创建这些目录,以避免日志摘录过长。