是启用双转义危险?(Is Enabling Double Escaping Dangerous?)

2019-07-18 17:47发布

我有允许通过/搜索/ <搜索关键词>寻找的东西路由的ASP.NET MVC应用程序。

当我提供“搜索/ ABC”它工作得很好,但是当我供应“/搜索/ A + B + C”(正确URL编码),然后IIS7拒绝与HTTP错误404.11( 请求滤波模块被配置为拒绝一请求包含双转义序列请求 )。 首先,它为什么要这样做呢? 它似乎只抛出错误,如果它是URL的一部分,但不是作为查询字符串的一部分(/发送Q = A + B + C正常工作)。

现在,我可以使我在web.config中的安全部分双逃生的要求,但我不愿这样做,因为我不理解的含义,也不为什么,服务器会拒绝请求“A + B + C”作为该URL的一部分,但接受作为查询字符串的一部分。

有人可以解释,并提供一些意见做什么?

Answer 1:

编辑:增加了强调相关章节。

基本上:IIS进行了过度偏执。 如果你没有做什么特别不明智与URI解码的数据(如生成本地文件系统的URI通过字符串连接)您可以放心禁用此检查。

要禁用检查做如下设置( 在这里 ):(见下面我的评论什么双重转义需要)。

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

如果加号是在搜索输入一个有效的字符,你将需要启用“allowDoubleEscaping”允许IIS来处理来自URI的路径这样的输入。

最后,很简单的,如果限制的解决方法是简单地避免“+”和使用“%20”代替。 在任何情况下,使用的“+”符号来编码空间是无效的URL编码 ,但具体到一组有限的协议,可能为了向后兼容的原因广泛支持。 如果只是为了标准化的目的,你最好编码空间为“%20”无论如何; 这很好地回避了IIS7问题(其仍然可以裁剪为其他序列,例如%25AB)。



Answer 2:

你有没有想过有像“/搜索/ A / B / C”的搜索网址是什么?

你需要建立像路线

search/{*path}

然后从你的行动路径字符串中提取搜索值。

HTHS
查尔斯



Answer 3:

我只想补充一些信息埃蒙Nerbonne的回答您问题相关的(没有解释个为什么)的“ 做什么 ”的一部分。
您可以轻松更改特定应用程序的设置也与

  1. 打开具有管理员权限的控制台(开始- CMD -右键,以管理员身份运行)
  2. 打字以下(从这里取: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx ):

     %windir%\system32\inetsrv\appcmd set config "YOURSITENAME" -section:system.webServer/security/requestfiltering -allowDoubleEscaping:true 

    (你可以代替例如YOURSITENAMEDefault Web Site应用此规则的默认网站)

  3. 回车,准备好了。

一个例子:

  1. 首先,我有同样的问题:
  2. 键入上述文字:
  3. 现在,它按预期工作:


Answer 4:

我就遇到了这个IIS 7.5下的应用程序做Server.TransferRequest()。

编码文件名引起双逃避问题,但如果我没有对其进行编码,然后我会碰上“有潜在危险的Request的”错误。

把一个任何协议,甚至一个空,在I传给Server.TranferRequest的URL()固定的问题。

不工作:

context.Server.TransferRequest("/application_name/folder/bar%20bar.jpg");

作品:

context.Server.TransferRequest("://folder/bar%20bar.jpg");


文章来源: Is Enabling Double Escaping Dangerous?