ModSecurity 阻止无效的主机引用

ModSecurity Block invalid host referer

我需要一个规则来阻止对 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 header 时有效
  • Hostheader一定也存在

可能你需要另一个链式规则,它检查 Referer header 的存在,如果 URI 是 /wp-login,但我认为基于上面的规则你可以生产它。