Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mod_rewrite对抗Apache黑客企图_Apache_.htaccess_Security_Mod Rewrite - Fatal编程技术网

使用mod_rewrite对抗Apache黑客企图

使用mod_rewrite对抗Apache黑客企图,apache,.htaccess,security,mod-rewrite,Apache,.htaccess,Security,Mod Rewrite,在给定的PHPWeb应用程序中,mod_rewrite通常用于简化URL并使PHP更容易提供所需的内容。但另一方面,它可以为黑客尝试打开机会,特别是当像我这样的人写的时候,相对来说,对mod_重写来说是比较新的。考虑一个简单的例子,而不是代码,只是转换本身,在.HTAccess文件中使用MODYRead来读取用户代理数据,并将其添加到URL中作为获取数据: Safari用户:example.com/page->example.com/page?browser=Safari Chrome用户:ex

在给定的PHPWeb应用程序中,mod_rewrite通常用于简化URL并使PHP更容易提供所需的内容。但另一方面,它可以为黑客尝试打开机会,特别是当像我这样的人写的时候,相对来说,对mod_重写来说是比较新的。考虑一个简单的例子,而不是代码,只是转换本身,在.HTAccess文件中使用MODYRead来读取用户代理数据,并将其添加到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先去掉所有获取的数据,那以后会破坏数据吗?更重要的是,是否允许从某些来源(如网站的应用程序)获取数据,而不允许从其他来源(如浏览器、wget、curl或类似工具)获取数据?

要删除browserclient提供的所有查询字符串,可以在根目录中使用此规则。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标志的重写规则在内部添加。

关于选择性查询剥离,例如允许从应用程序而不是浏览器或命令行工具进行查询,这将仅阻止来自浏览器或命令行工具的查询字符串我明白了,但如果有时我希望允许查询字符串呢?例如,如果我为我的站点构建了一个移动应用程序,并在该应用程序中使用了正确的站点请求格式,那么我根本不需要修改URL。但只有在我自己的应用程序发出请求的情况下,才能这样做。htaccess mod_rewrite是否可以将其用作重写条件?确定检查更新的答案以基于%{HTTP_REFERER}进行检查。将domain.com替换为您的实际域。但请记住,%{HTTP_REFERER}也可以在客户端自定义。有什么不太容易被破解的吗?