在给定的PHP Web应用程序中,mod_rewrite通常用于简化URL并使PHP更容易提供所需的内容。但另一方面,它可以为黑客攻击提供机会,尤其是当某人(比如我自己)对mod_rewrite相对较新的时候。考虑一个简单的例子,而不是代码,只是转换本身,使用.htaccess文件中的mod_rewrite来读取用户代理数据,并将其作为GET数据添加到URL中:
Safari用户:example.com/page -> example.com/page?browser=safari
Chrome用户:example.com/page -> example.com/page?browser=chrome
IE用户:example.com/page -> example.com/page?browser=ie
如果Internet Explorer用户想要查看Chrome版本,他或她可以发送包含GET数据的页面请求,该请求将更新如下:
黑客:
example.com/page?browser=chrome -> example.com/page?browser=chrome?browser=ie
当然,这是一个人为的例子,但这个想法仍然存在。如果你有mod_rewrite首先删除所有GET数据,那么以后会破坏它吗?更重要的是,可以从某些来源(如网站的应用程序)获取GET数据,但不能从其他来源(如浏览器,wget,curl或类似的东西)获取GET数据吗?
答案 0 :(得分:0)
要删除所有浏览器(客户端)提供的查询字符串,您可以在根目录中使用此规则.htaccess:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/ [NC]
RewriteCond %{THE_REQUEST} \s/+([^?]+)\? [NC]
RewriteRule ^ /%1? [R=302,L]
PS:由于使用了%{THE_REQUEST}
,这将允许其他重写规则在内部添加查询参数,而不使用R
标记。