我最近遇到了一次 RFI 攻击,其中查询字符串有一堆 ../../../,我想修改 .htaccess 以防止查询字符串中出现任何 ../。
我一直在尝试这个,直到我意识到需要转义这段时间:
RewriteCond %{QUERY_STRING} ../
RewriteRule .* - [F]
然后我将其更改为:
RewriteCond %{QUERY_STRING} \.\./
RewriteRule .* - [F]
但它仍然禁止在查询字符串中使用任何/。
此外,如果我在 {REQUEST_URI}
中有规则,那会使 {QUERY_STRING}
变得多余吗?
谢谢。
编辑:
我已经成功地让这个工作了:
RewriteCond %{QUERY_STRING} (\.\./)
但是,RewriteCond %{REQUEST_URI}\.\./
或 RewriteCond %{REQUEST_URI} (\.\./)
不会。我也尝试过 /\.\./
& (/\.\./)
最佳答案
%{QUERY_STRING}
是 ? 之后的所有内容,因此您的规则成功阻止了像 htis 这样的 URL:
http://domain.com/blah.php?../../../path
但是您的 URI 不会被检查。您可以通过修改规则来检查两者:
RewriteCond %{QUERY_STRING} \.\./ [OR]
RewriteCond %{REQUEST_URI} \.\./
RewriteRule .* - [F]
关于.htaccess 转义句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122972/