Ale*_*lex 133 c# asp.net-mvc iis-7
我有一个ASP.NET MVC应用程序,其路由允许通过/ search/<searchterm>搜索内容.
当我提供"search/abc"时,它运行良好,但是当我提供"/ search/a + b + c"(正确的url编码)时,IIS7拒绝HTTP错误404.11 的请求(请求过滤模块配置为拒绝请求包含双转义序列).首先,它为什么这样做?它似乎只是抛出错误,如果它是URL的一部分,但不作为查询字符串的一部分(/ transmit?q = a + b + c工作正常).
现在我可以在我的web.config的安全部分启用双转义请求,但我不愿意这样做,因为我不明白其含义,也没有为什么服务器拒绝请求"a + b + c"为URL的一部分,但作为查询字符串的一部分接受.
有人可以解释并提供一些建议吗?
Eam*_*nne 154
编辑:增加了相关部分的重点.
基本上:IIS过于偏执.如果您没有对uri解码数据执行任何特别不明智的操作(例如通过字符串连接生成本地文件系统URI),则可以安全地禁用此检查.
要禁用检查,请执行以下操作(从此处开始):(请参阅下面的评论,了解双重转义的含义).
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
如果加号是搜索输入中的有效字符,则需要启用"allowDoubleEscaping"以允许IIS从URI的路径处理此类输入.
最后,一个非常简单但有限的解决方法是简单地避免使用'+'并使用'%20'代替. 在任何情况下,使用"+"符号对空间进行编码都不是有效的url编码,而是特定于一组有限的协议,并且可能因向后兼容性原因而受到广泛支持.如果仅用于规范化目的,最好将空格编码为'%20'无论如何; 这很好地避开了IIS7问题(它仍然可以用于其他序列,例如%25ab.)
归档时间: |
|
查看次数: |
69553 次 |
最近记录: |