如果查询字符串包含关键字,则htaccess发送404



我看到很多流量,我怀疑这些流量是在用的请求格式探测缺陷或漏洞

https://example.com/?testword

我想,当我进一步研究这个问题时,我可以节省资源,并通过404或500响应来干扰或阻止这些请求

我试过

RewriteEngine On
RewriteCond %{QUERY_STRING} !(^|&)testword($|&) [NC]
RewriteRule https://example.com/ [L,R=404]

查询字符串上的其他一些变体匹配,但在测试时似乎没有返回404。我发现的其他问题是查找查询字符串值/对并重写它们,但似乎没有任何例子只针对单个值。

RewriteCond %{QUERY_STRING} !(^|&)testword($|&) [NC]
RewriteRule https://example.com/ [L,R=404]

这里有几个问题:

  • 条件中的CondPattern被否定(!前缀(,因此只有当查询字符串中不存在testword时才成功。

  • RewriteRule指令缺少模式(第一个(参数(或替换的第二个(参数,具体取决于您如何看待它(。RewriteRule指令仅与URL路径匹配。

  • R标志指定非3xx状态代码时,将忽略替换。您应该指定一个连字符(-(来表示没有替换

为了测试整个单词";测试词";在查询字符串中的任何位置存在,则可以使用正则表达式btestwordb-其中b单词边界。或者您可能只是希望正则表达式testword-与";测试词";在任何地方,包括当它作为另一个单词的一部分出现时?相比之下,正则表达式(^|&)testword($|&)将错过";测试词";显示为URL参数名称。

请尝试以下操作:

RewriteCond %{QUERY_STRING} btestwordb [NC]
RewriteRule ^$ - [R=404]

这只匹配主页(即空的URL路径(。指定非3xx返回状态时不需要L标志,这是隐含的。

-(第二个参数(表示没有替换。如上所述,当指定非3xx HTTP状态时,替换字符串将被忽略。

要测试任何URL路径,只需删除RewriteRule模式上的$(字符串末尾锚点(。例如:

RewriteCond %{QUERY_STRING} btestwordb [NC]
RewriteRule ^ - [R=404]

如果你的主页不接受任何查询字符串参数,那么当存在查询字符串时,你可以简单地拒绝请求(即404未找到(。例如:

RewriteCond %{QUERY_STRING} .
RewriteRule ^$ - [R=404]

相关内容

  • 没有找到相关文章

最新更新