RewriteCond HTTP_REFERER允许自己的网站作为url参数并阻止其他网址

时间:2014-04-04 05:41:55

标签: wordpress .htaccess mod-rewrite wordpress-plugin

我希望在我的一些网页中收到自己网站的网址作为$ _GET参数,但不希望任何其他网址在任何网页上作为$ _GET参数传递。对于这个.htaccess代码,这里提到的其他措施很少。:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.(bash|git|hg|log|svn|swp|cvs) [NC,OR]
RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [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} ^.*(127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|concat|insert|union|declare).* [NC]
RewriteCond %{QUERY_STRING} !^loggedout=true
RewriteCond %{QUERY_STRING} !^action=rp
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteCond %{HTTP_REFERER} !^http://maps\.googleapis\.com(.*)$
RewriteCond %{HTTP_REFERER} !^http://mysite\.com(.*)$
RewriteRule ^(.*)$ - [F,L]

</IfModule>

即使添加

RewriteCond %{HTTP_REFERER} !^http://mysite\.com(.*)$

在结束的第3行,如果我尝试在我的任何网页(例如包含http (ex: 'http://mysite\.com'))中将我的网站的任何网址作为GET参数传递,则会返回403错误。

以下是我尝试访问我网站的网址作为GET参数的方式:

'http://mysite\.com/abc_page?url=http://mysite\.com/efg_page'

请指出我上面的代码我做错了什么。该代码实际上是由Word Press Better Security Plugin添加的,我添加了RewriteCond %{HTTP_REFERER} !^http://mysite\.com(.*)$以允许我自己网站的网址。

在.com之前添加了

'\',因为stackoverflow不允许使用mysite.com名称放置在正文中。

0 个答案:

没有答案