ModSecurity 阻止无效的主机引用

问题描述

我需要一个规则来阻止对 wp-login.PHP 的所有 POST 请求,
但是我需要检查引用域是否等于请求的域名
我们需要检查这些东西:

  1. 检查请求的域值(例如:sitename1.com)
  2. 检查引用域值(例如:sitename1.com)
  3. 如果请求的域等于引用域
  4. 如果请求是 POST
  5. 如果请求的文件是 wp-login.PHP

我有以下代码来检查引用,但我也需要检查引用中的域

#Block WP logins with no referring URL
<Locationmatch "/wp-login.PHP">
Secrule REQUEST_METHOD "POST"  "deny,status:401,id:5000130,chain,msg:'wp-login request blocked,no referer'"
Secrule &HTTP_REFERER "@eq 0"
</Locationmatch>

在这种情况下,我可以完全检查访问者并确保他是人类 感谢您的帮助

解决方法

我不确定我是否理解您的问题,但这条链式规则可能会对您有所帮助:

SecRule &REQUEST_HEADERS:Referer "!@eq 0" \
    "id:5000130,\
    phase:1,\
    t:none,\
    deny,\
    status:401,\
    chain,\
    msg:'wp-login request blocked,no referer'"
    SecRule REQUEST_URI "@beginsWith /wp-login.php" \
        "chain"
        SecRule REQUEST_METHOD "@streq POST" \
            "chain"
            SecRule REQUEST_HEADERS:Host "@rx .*" \
                "capture,\
                chain"
                SecRule REQUEST_HEADERS:Referer "@streq %{TX.0}"

请记住:

  • 此链式规则仅在设置了 Referer 标头时才有效
  • Host 标头也必须存在

可能您需要另一个链式规则,它检查 Referer 标头是否存在,如果 URI 是 /wp-login,但我认为基于上述规则您可以生成它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...