使用mod_rewrite与Apache进行黑客攻击

时间:2014-06-17 19:02:21

标签: apache .htaccess security mod-rewrite

在给定的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数据吗?

1 个答案:

答案 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标记。