.htaccess导致403 - 我该如何解决这个问题?

时间:2012-09-22 02:00:50

标签: .htaccess

我有一个网站,我在wordpress中包装了phpbb3。虽然当我将此安全建议添加到我的.htaccess时,它的效果非常好:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(&#x22;|&#x27;|&#x3C;|&#x3E;|&#x5C;|&#x7B;|&#x7C;).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>

当用户尝试在某些论坛页面上使用搜索表单时,会导致403错误。这是搜索的显示方式(例如):

<div class="search-box">
<form method="post" id="forum-search" action="./search.php?fid[]=5">
<fieldset>
<input class="inputbox search tiny" type="text" name="keywords" id="search_keywords" size="20" value="Search this forum…" onclick="if (this.value == 'Search this forum…') this.value = '';" onblur="if (this.value == '') this.value = 'Search this forum…';" />
<input class="button2" type="submit" value="Search" />
<input type="hidden" value="5" name="fid[]" />
</fieldset>
</form>
</div>

以“禁止”的形式回归。当我拿出.htaccess的那一部分时,它运行正常。我知道关于.htaccess的基础知识,并且无法弄清楚为什么该代码在HTML / PHP的那一部分上导致403。

任何想法都会受到赞赏......谢谢......

1 个答案:

答案 0 :(得分:0)

它导致403,因为你在你的htaccess中返回403,你的重写规则中的F标志就是这样。

你可能想要这样做。第一个规则通过HEAD,TRACE,DELETE和TRACK方法阻止请求。第二条规则使用一堆可能的查询字符串阻止请求,如果缺少 wordpress_logged_in cookie *,则阻止*。因此,如果您没有名为 wordpress_logged_in _ 的Cookie,那么您将获得403.