【问题标题】:error when url resource contains ampersandurl 资源包含 & 符号时出错
【发布时间】:2018-05-22 20:06:20
【问题描述】:

我们有一个带有以下资源 url 的 web api。

http://www.example.com/book/bookid/name/bookname

现在有一些书籍包含带有 & 符号的名称,当请求此类名称时,我们会收到以下错误

使用的网址:

http://www.example.com/book/123/name/ban&ban

错误:检测到来自客户端 (&) 的潜在危险 Request.Path 值

我们尝试为 & 传递或使用编码值,即 %26 并得到相同的错误。

使用的网址:

http://www.example.com/book/123/name/ban%26ban

错误:检测到来自客户端 (&) 的潜在危险 Request.Path 值

现在,当我在 httpruntime 元素的 web.config 中添加 requestPathInvalidCharacters="" 属性时,它开始对上述两个 URL 都正常工作。但是,当我阅读不同的文章时,据说使用 requestPathInvalidCharacters="" 属性不是一个好习惯。

另外,由于生产中有很多书名带有“&”和不同的特殊字符,我们不能避免为书名发送“&”符号,有没有好的方法来处理这个问题?

【问题讨论】:

  • 也许您需要稍微修改您的客户端逻辑以确保编码的 URL 不会触发误报。理想情况下,它不应该。
  • 怎么做?
  • 既然已经有了 bookid,为什么还要在 Url 中输入书名?

标签: c# asp.net-web-api


【解决方案1】:

您应该选择在查询字符串中使用参数而不是路径。例如: http://www.example.com/book/bookid?name=Fizz&bookname=Buzz

以下是关于为什么会引发此异常的一些解释: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

【讨论】:

  • 感谢文章链接。不过,我之前确实读过这个。但是避免了这条路线,因为我认为它需要再次更改代码。许多客户一直在使用这个端点。因此,将上述路由更改为查询字符串将产生很大影响,因为这将要求客户端更改 url。所以,我在想是否可以在控制器内部的代码中只为这个端点做一些事情。因为,有很多控制器,并且在 web.config 中进行更改会导致问题或使所有控制器的代码变脏。
  • 链接中的文章描述了为什么它不是控制器设置(请求路径在 MVC 解析参数并将其传递给控制器​​之前得到处理)。有许多真正的路径遍历攻击可用,我不确定您为什么要让您的代码受到这些漏洞的影响。
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 2015-05-05
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多