【问题标题】:Getting “A potentially dangerous Request.Path value was detected from the client (&)”获取“从客户端检测到潜在危险的 Request.Path 值 (&)”
【发布时间】:2015-10-21 11:10:50
【问题描述】:

我有一个 REST 服务,当我尝试调用名称中包含 & 的项目时,我收到上述错误,如果我没有对&

所以这是我的电话:

http://localhost:57851/myService/Servers/myServer/Repositories/myRepository/Models/Mine%26Yours

您可以看到“Mine&Yours”已被编码为“Mine%26Yours”,因此应该是安全的。

但是请求正在被提取,就好像我没有对其进行编码一样。

有什么想法吗?

编辑:

这和 (Getting "A potentially dangerous Request.Path value was detected from the client (&)") 不一样

【问题讨论】:

  • 不,不是重复,在那个问题中他们没有对 & 进行编码,所以是的,应该会失败。
  • 你的意思是'捡起'好像我没有编码它?编码的思想是为了避免潜在的危险行为,但最终在服务器端得到原始值(未编码)
  • 当我说捡起时,我的意思是当我将上面的 url 输入我的浏览器(在本例中为 IE)时,它会显示我所说的错误消息。所以该值永远不会达到我的服务端点。

标签: asp.net-mvc vb.net rest


【解决方案1】:

是否对& 符号进行编码对 ASP.NET 没有影响。看到这个答案:https://stackoverflow.com/a/12037000/134761

要在您的 URL 路径中允许特殊字符,您应该像这样修改 web.config 中的 requestPathInvalidCharacters 参数:

<httpRuntime requestPathInvalidCharacters="" />

或者,如果您只想允许 &amp; 而不允许所有其他特殊字符:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,\"/>

【讨论】:

  • 嗨@holdenmcgrohen,感谢您的信息,我知道requestPathInvalidCharacters 设置并希望避免使用它并允许 和& 等字符未经检查传入。
  • 想看看是否有人有更安全的方法来处理这个问题,而不是允许未经检查的潜在危险字符。
  • 更安全的方法是完全避免在路径中使用特殊字符:将这部分 URL 转换为参数(例如 myRepository?Models=Mine%26Yours)或使用一些自定义编码/解码机制特殊字符
【解决方案2】:

扩展 holdenmcgrohen 答案,如果您愿意,您可以将更改限制为特定路径

  <location path="documents">
    <system.web>
    <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,\"/>
    </system.web>
  </location>  

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2012-04-06
    • 2017-10-07
    • 2011-08-06
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多