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


114

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

这是一个示例网址...

http://mywebsite.com/Test123/This_&_That

这是我设置全部路由的方式(我还有其他路由来捕获特定页面)...

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

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

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

我还向应该捕获网址的操作添加了ValidateInput属性。

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

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


1
有一个设置允许某些字符,待我回到计算机后不久便会检查……但是您可以对您的URL进行urlencode吗?
Adam Tuliper-MSFT


我不知道网站出于什么原因在内部尝试进行重定向,而该重定向正在创建类似“ localhost /:// localhost / myWebsiteName ” 的URL ,这给了我同样的错误。我不知道为什么ASP.net管道将其视为危险的请求URL。
RBT

就我而言,我在网址中缺少斜线。要做的第一件事是检查URL中是否有错字。
Kishan Vaishnav

Answers:


162

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

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

我会避免在URL路径中使用诸如'&'之类的字符,并用下划线代替它们。


13
看来requestPathInvalidCharacters =“”起到了作用。谢谢。我绝对同意您不应该在路径中使用&,不幸的是我们已经允许使用了多年,因此我们需要继续支持它。
布莱恩

5
这不是安全问题吗?
MariusStănescu2013年

3
@MariusStanescu-本质上不是安全问题;这取决于您对它的处理方式。如果输入被接受并转义并包含在输出中,那就没问题了。如果无法逃脱,那么您可能会遭受攻击。
贾斯汀·赫尔格森2013年

2
该解决方案可以为您提供此错误:HTTP错误500.19-内部服务器错误无法访问请求的页面,因为该页面的相关配置数据无效。
汤姆·斯蒂克

2
使用此答案时,我还收到错误500。这是由于已经具有<httpRuntime>和<pages>标记,因此存在重复冲突。解决之后,这个答案对我也很好。
Kallum Tanton,2015年

5

我已经遇到了这类错误。从剃须刀调用功能。

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

通过改变线来解决

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

我的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
        );

1

如果您只允许HTML标记用于mvc中的几个文本框

你可以做一件事

在控制器中

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}

1
OP明确地说出了他需要支持的URL(不是文本框内容),并且也没有提及HTML-因此您的答案实际上不适用于给定的问题。
奥利弗·

2
它不适用于该问题,但我赞成,因为这是我不知道的选择。感谢@Pavan
MickJuice 2014年

0

试图弄清楚为什么我们的Silverlight ArcGIS地图查看器未加载地图时,我们在Fiddler中遇到了相同的错误。在我们的例子中,这是代码中URL的错字。由于某种原因,那里有一个平等的迹象。
http:= // someurltosome / awesome / place
而不是
http:// someurltosome / awesome / place

取出等号后,效果很好(当然)。


0

检查以下行是否存在于您的web.config文件中

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.