今天360搜索引擎例行的网站安全检查,网站后台记录下了这一过程:

这里面我发现一些记录从后台无法打开的,例如这条:http://www.icvio.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重写规则折衷地解决了问题:

番外篇:关于htmlspecialchars函数的用法

这个方法比较简单,用到的地方也很多,基本信息可以查看一下php手册,这里我给大家贴出他的常用的一些值:

$str = "Bill & 'Steve'";

echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号echo "
";

echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号echo "
";

echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号

html 400 错误,网站报400Bad Request错误的解决办法相关推荐

  1. mysql数据库连接过多的错误,可能的原因分析及解决办法

    mysql数据库连接过多的错误,可能的原因分析及解决办法 来源:网络采集 作者:未知 系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是 ...

  2. uni-app真机调试报错request:fail abort解决方法

    uni-app真机调试报错request:fail abort解决方法 参考文章: (1)uni-app真机调试报错request:fail abort解决方法 (2)https://www.cnbl ...

  3. VB6程序运行错误Run-time error 339: Tabctl32.ocx的解决办法

    运行错误Run-time error 339: Tabctl32.ocx的解决办法 [问题] 最近一段时间与教研室的各位老师在做一个山东省一级OFFICE模拟软件时,前面的开发工作一切顺利,却在后面的 ...

  4. SyntaxHighlighter行号显示错误及代码太长无法换行解决办法

    2019独角兽企业重金招聘Python工程师标准>>> SyntaxHighlighter是一个使用JavaScript编写的功能齐全的代码语法高亮的软件.如果一行代码或注释太长的话 ...

  5. win7 php乱码,打开网站php出现乱码问题的解决办法nsiserror解决办法win7黑屏解决办法龙之谷报错解决办...

    问题:用浏览器打开写好的php文件,然后发现中文字符显示为问号,网站显示不正常 原因:出现乱码的问题的原因是数据库,浏览器和php文件采用的编码方式不相同 解决办法: 1.浏览器编码方式修改:(以谷歌 ...

  6. IDEA中pom.xml配置文件依赖文件版本号报红的最有效解决办法

    关于IDEA中pom.xml配置文件依赖文件版本号报红的最有效解决办法,简单粗暴直接! 问题产生及解决过程 产生的报错 解决过程 问题产生及解决过程 产生的报错 最近在研究IDEA的使用以及boots ...

  7. oracle 6508,【案例】Oracle报错ORA-06552 ORA-06553 ORA-006508解决办法

    天萃荷净 Oracle研究中心案例分析:运维DBA反映Oracle数据库alert日志中出现大量ORA-06552 ORA-06553 ORA-006508报错,分析原因为存储过程异常导致,结合MOS ...

  8. java 报错404_Javaweb工程运行报错HTTP Status 404解决办法

    最近在学习jsp和servlet,避免不了的要和tomcat打交道,但tomcat经常会出现各式各样的错误,下面是我总结的一些常见的解决方法,希望对大家有用. 1.未部署web应用 2.url输入错误 ...

  9. 安装32位mysql报错_在CentOS中安装32位或64位MySql报错error: Failed dependencies解决办法...

    在CentOS中安装MySql报错error: Failed dependencies解决办法 安装64位MySql报错内容如下: error: Failed dependencies: libaio ...

最新文章

  1. Spring 中策略模式的 2 个经典应用
  2. 用python做炒股软件-同花顺有python接口_基于python的炒股软件
  3. Eclipse旧版本Luna SR2(版本4.4.2)下载地址
  4. Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message
  5. bzoj4869: [Shoi2017]相逢是问候(欧拉函数+线段树)
  6. html新浪微博页面练习,js实现新浪微博首页效果
  7. 云计算如何从计算机发展而来,云计算是由什么发展而成的产物?
  8. 《又到毕业季》MATLAB GUI 鼠标键盘交互
  9. 【云原生】设备云之前端可视化编程
  10. 无损内嵌字幕到mkv文件
  11. 为什么手机信号满格,但网速却还是那么慢?这4点原因是关键
  12. QQ邮箱授权码和二代密保
  13. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_Python编程常用技巧,你知道几个?...
  14. html5小游戏(12款)
  15. axure切换焦点文本框样式
  16. PHP 文章内链的实现方法
  17. 多线程如何实现事务回滚?一招帮你解决
  18. MP3音频录音机6.30版
  19. 记面试外包公司的一次经历,到底该不该去?
  20. 提高文件共享服务器速度,通过云服务器共享以优化网站速度并提高转换率

热门文章

  1. 毕业设计之基于springboot和vue的音乐网站
  2. JedisPool 工具类(DCL 思想)
  3. css两端对齐不起作用?真正可用的CSS文字两端对齐
  4. python砍价代码_【微擎微赞模块】砍价宝4.5小程序版+小程序前端+后端+素材包+砍价+抢购+拼团...
  5. linux中的条件变量的使用
  6. 全民经纪人小程序v2.6.10+插件+前端
  7. 雅达利linux模拟器,雅达利VCS主机将发售 用户可以自己制作游戏与应用!
  8. uniapp 获取界面指定元素div的高度
  9. 使用PICT生成成对组合进行组合覆盖测试,以及PICT和正交表的比较
  10. 使用ffmpeg提取嵌入MP4的视频封面