IIS7.0、IIS7.5、IIS8.0等提示“请求筛选模块被配置为拒绝包含双重转义序列的请求”的解决方法小结
错误信息
请求筛选模块被配置为拒绝包含双重转义序列的请求。HTTP 错误 404.11 - Not Found
下面是解决方法
方法一:
1.单击 开始 。 在 开始搜索 框中, 键入 Notepad. 右击 记事本 , 然后单击 作为管理员运行 。
注意 如果提示用于管理员密码或用于确认, 键入密码, 或单击 继续 。
2.在 文件 菜单上, 单击 打开 。 在 文件名 框中, 键入 %windir%\system32\inetsrv\config\applicationhost.config然后单击 打开 。
3.在 ApplicationHost.config 文件, 定位 文件中的 configuration/system.webServer/security/requestFiltering/下
<requestFiltering> 节点。大约360行
将<requestFiltering>
改为
<requestFiltering allowDoubleEscaping="true">
即可
方法二:
在wwwroot下建立web.config 内容如下:
< ?xml version="1.0" encoding="UTF-8"?>
< configuration>
< system.webServer>
< security>
< requestFiltering allowDoubleEscaping="True"/>
< /security>
< /system.webServer>
< /configuration>
如果已有web.config,只需在其中添加<security>这一节就行了.
方法三:
IIS中找到请求筛选,右侧:编辑功能设置
勾上允许双重转义即可。
关于双重转义:
文件目录有这样一个包含了加号的文件:2015年日历表(A4+版).pdf
现在要求下载此文件,考虑这样一个url /UploadFile/2015年日历表(A4+版).pdf
如果在浏览器访问这个url,有时候会出现404.11的错误
HTTP Error 404.11 - Not Found
请求筛选模块被配置为拒绝包含双重转义序列的请求
这是什么原因呢?
在window下,加号(+)是合法的文件名,但是在url里代表了不同的意思
若是作为queryString的一部分,那么+号代表空格
访问 https://www.baidu.com/?dd=ha+ha 和 https://www.baidu.com/?dd=ha%20ha效果是一样的,解码后,都代表了空格
但是+号作为Url component(注意不是作为queryString)时,就是+号本身,不会转义
例如 http://www.cnblogs.com/imust+2008/p/6829927.html
IIS7以及以上版本,集成了一个URLScan工具,用于扫描url,检测不安全的字符,此工具的Request Filtering模块用于过滤不安全的请求。
https://docs.microsoft.com/en-us/iis/manage/configuring-security/use-request-filtering
其中的double-encoded requests filter(双重转义过滤器),用于过滤双重转义序列。
当url出现双重转义序列时,IIS将对url进行两次url规范化(url normalization),当第一次规范化后的字符串与第二次规范化的字符串不一致时,IIS认为这是危险的url,IIS将拒绝这一请求,并返回404.11错误。
引自:https://www.jb51.net/article/93744.htm