【问题标题】:ASP.NET MVC 5 dangerous Request.Path detected检测到 ASP.NET MVC 5 危险的 Request.Path
【发布时间】:2015-07-17 13:58:50
【问题描述】:

我在使用 ASP.NET MVC 5 时遇到一个相当常见的问题,它会在无效 URL 字符(例如 &%)上引发异常。

我从其他堆栈溢出问题中尝试了很多不同的建议,例如herehere。但是,将此添加到我的 Web.config 不起作用:

<system.web>
    <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,%,:,\,?"
                 requestValidationMode="2.0"/>
</system.web>  

在我的控制器方法上方也没有添加[HttpValidate(false)]

我在寻找解决方案时发现了这个gem,它看起来很有希望,但即使这样也行不通。 url 请求没有被该站点的代码更改,这让我想知道问题是否在 ASP.net 甚至有机会采取行动之前发生。

我试图避免手动编码我的所有请求,但如果这是我必须做的,那么我想我别无选择。

如果有帮助,这是我的堆栈跟踪:

[HttpException (0x80004005): 检测到来自客户端 (&) 的潜在危险 Request.Path 值。]

System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9693412 System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +53

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    我在 Web-Form 应用程序中遇到过这个错误,它通常是由传递给控制器​​的特殊字符引起的。最简单的解决方案,以确保您的数据在到达控制器之前被正确编码。这将是最安全的方法,但是如果您想要一种快速而肮脏的方法,您可以通过web.config 稍微放松页面/视图的安全性。

    <!-- Example: 'Web-Config' -->
    <location path="test.aspx">
      <system.web>
        <httpRuntime requestValidationMode="2.0" />
      </system.web>
    </location>
    

    上面做了以下事情:

    在任何一种情况下,您都必须在 Web.config 文件中进行两项更改。这 第一个变化是设置 requestValidationMode 属性 httpRuntime 元素改为“2.0”。此设置使请求验证 在请求处理事件序列的后面发生。那个设定 对于使用 ASP.NET 4 及更高版本的应用程序是必需的,因为作为 在 ASP.NET 4 中,请求验证发生在请求的早期 与以前版本的 ASP.NET 相比,生命周期。

    否则你可以简单地使用:

    HttpUtility.HtmlDecode("...");
    HttpUtility.HtmlEncode("...");
    

    以上目的:

    如果在 HTTP 中传递空格和标点符号等字符 流,它们可能在接收端被误解。 HTML encoding 将 HTML 中不允许的字符转换为 字符实体等价物; HTML 解码反转编码。为了 例如,当嵌入到文本块中时,字符 是 编码为 用于 HTTP 传输。

    您还可以查找UrlEncodeUrlDecode

    【讨论】:

    • 我不会说这完全解决了我的问题,但它把我推向了正确的方向。我最终编码了我的 url 请求,所以我认为它足够接近。感谢您的帮助。
    • @Fosforus 很高兴它有帮助,是的,遗憾的是,有些遭遇是一次性的,但通常围绕这种解决方法。
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 2012-04-06
    • 2017-10-07
    • 2011-08-06
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多