获取"从客户端(&)检测到潜在危险的Request.Path值"

Bri*_*ian 113 asp.net-mvc asp.net-mvc-3

我有一个遗留代码问题,需要我支持随机网址,就好像它们是对主页的请求一样.某些URL中包含的字符会生成错误"从客户端(&)检测到潜在危险的Request.Path值".该站点使用ASP.Net MVC 3(在C#中)编写,并在IIS 7.5上运行.

这是一个示例URL ...

http://mywebsite.com/Test123/This_&_That
Run Code Online (Sandbox Code Playgroud)

这是我如何设置我的全部路线(我有其他路线来捕捉特定页面)......

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

我在web.config文件中添加了以下内容...

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>
Run Code Online (Sandbox Code Playgroud)

我还在应该捕获URL的操作中添加了ValidateInput属性...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到错误.有什么想法吗?我错过了什么?现在我只是在我的本地开发服务器上运行(我还没有在生产中尝试过这些修复).

Ale*_*yev 162

虽然您可以在配置文件中尝试这些设置

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

我会避免在URL路径中使用像'&'这样的字符,用下划线替换它们.

  • 似乎requestPathInvalidCharacters =""就可以了.谢谢.我绝对同意你不应该使用&在路径中,不幸的是我们已经允许它多年,所以我们需要继续支持它. (13认同)
  • 这不是一个安全问题吗? (5认同)
  • @MariusStanescu - 这本身并不是一个安全问题; 这取决于你用它做什么.如果输入被转移并转义并包含在输出中,那就没问题了.如果它没有被转义,那么你可能会让自己受到攻击. (3认同)
  • 此解决方案可能会出现此错误:HTTP错误500.19 - 内部服务器错误无法访问请求的页面,因为页面的相关配置数据无效. (2认同)
  • 使用此答案时我也收到错误500.这是由于已经有<httpRuntime>和<pages>标签,因此存在重复冲突.解决之后,这个答案也适合我. (2认同)

rez*_*e08 5

我遇到过这种类型的错误.从剃刀调用一个函数.

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}
Run Code Online (Sandbox Code Playgroud)

通过改变线来解决这个问题

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 
Run Code Online (Sandbox Code Playgroud)

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />
Run Code Online (Sandbox Code Playgroud)

我的route.config是哪里

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)