【问题标题】:ModSecurity Block invalid host refererModSecurity 阻止无效的主机引用
【发布时间】:2021-05-24 20:21:19
【问题描述】:

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

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

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

#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>

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

【问题讨论】:

    标签: apache mod-rewrite firewall mod-security mod-security2


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,只是我认为捕获的字符串是主机,但您正在尝试比较引荐来源网址
    • 我们需要比较referer domain,而不是referer url|uri
    • 随意替换规则。
    • 我会尝试测试然后添加最终规则,谢谢
    • 您应该将@rx 运算符的参数更改为http(|s):\/\/([^:\/]+)(:(\d)|\/).*,并将%{TX.0} 更改为%{TX.2}。在这种情况下,引擎会将Host 标头与Referer 的主机部分进行比较。我想这就是你需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2021-11-11
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多