我希望在我的一些网页中收到自己网站的网址作为$ _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} ^.*("|'|<|>|\|{||).* [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(.*)$
以允许我自己网站的网址。
'\',因为stackoverflow不允许使用mysite.com名称放置在正文中。