网站报400Bad Request错误的解决办法
今天360搜索引擎例行的网站安全检查,网站后台记录下了这一过程:
这里面我发现一些记录从后台无法打开的,例如这条://chixintf.com/'))%20AND%202733=3566%16
原因很简单:这些是以制表符(tab)结尾的URL。这些URL是使用函数 htmlspecialchars() 处理过的,将里面的单引号和双引号使用 % 加两位16进制数字替换了,访问这些URL时,IIS会返回400 bad request的错误:
这一系统错误信息网页页面内容是由IIS的下层http.sys会折回的,既是不能自的定义系统错误信息网页页面内容,也是不能确定URL重写。当时的我们都想的最终结果是点击那么的URL时,能自动的跳转页面至对的的URL(清掉好的开头的制作手表符)。
于想指明方向IIS URL Rewrite Module来实现了,但现如今要求进行被http.sys在底部屏蔽了,根本点顺利到达不掉URL Rewrite Module。好在,可以根据登陆表设立让http.sys不屏蔽如此的URL。
注册会员表装置具体方法下述:
regedit开启注册成功表编辑器,走进HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
移除键值:AllowRestrictedChars REG_DWORD 1 (同意为0,会屏蔽\x00-\x1F与\x7F-\x9F的字段,制作表格符的ASCII码是\x09)
重起http.sys与IIS,使报名表的装置判决书生效:
net stop http
net start http
iisreset
如此一来配置以来,URL中主要包括制作表格符的明确提出就能到IIS URL Rewrite Module,接下来用这条URL重写规责开展重定向就业跳出。结果显示却找到跟本没法功用,没开展跳出,已然是400系统错误,只不通过当前是由ASP.NET回退的。
HTTP Error 400.0 - Bad Request
ASP.NET detected invalid characters in the URL.
这想大概是URL Rewrite Module的一款小bug。
过后采用了一个折衷的处理做法,不完成重定向分配跳出,只完成URL重写,这样子固然URL错误,但少于选项卡会通常远程访问。
所以后面进行了接下来,的URL重写游戏规则折衷地来解决了难题:
<rule name="endwith_tab" stopProcessing="true">
<match url="^([^.]+\.(?:html|php))[\x09]" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="{R:1}" appendQueryString="false" />
</rule>
番外篇:有关htmlspecialchars涵数的使用说明
该具体方法更加很简单,用作的敌方也诸多,差不多信息内容能够查询点一下php实用手册,这边我给大众贴出他的常见的那些值:
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号
- 上个条: 乐博体育:使用百度CDN后,火狐浏览器报错
- 下一条什么: IIS7.5+PHP网站打开速度慢的一个解决方法