首页 > 解决方案 > 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>

在这种情况下,我可以完全检查访问者并确保他是一个人感谢任何帮助

标签: apachemod-rewritefirewallmod-securitymod-security2

解决方案


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

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,但我认为根据上面的规则您可以生成它。


推荐阅读