2011-05-17 109 views
97

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

下面是一个例子网址...

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属性添加到sh应该赶上网址...

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

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

+1

有一个设置,以允许某些字符,我会很快检查当回到电脑......但你可以urlencode你的URL? – 2011-05-17 03:23:47

+0

可能的重复[从客户端(\ *)检测到潜在危险的Request.Path值](http://stackoverflow.com/questions/5967103/a-potentially-dangerous-request-path-value-was-was-detected -from-the-client) – Marijn 2014-03-11 16:10:40

+0

我不知道该网站在什么原因在内部尝试重定向,它创建了一个像“http:// localhost /:// localhost/myWebsiteName /”这样的URL,它给了我相同的错误。我不知道为什么ASP.net管道认为它是一个危险的请求URL。 – RBT 2016-09-28 08:19:59

回答

146

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

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

我会避免在URL路径中使用诸如“&”字符用下划线替换它们。

+10

看起来requestPathInvalidCharacters =“”做了诀窍。谢谢。我绝对同意你不应该在路上使用&,不幸的是我们已经允许它多年,所以我们需要继续支持它。 – Brian 2011-05-17 16:17:13

+5

是不是一个安全问题? – 2013-03-08 12:44:10

+2

@MariusStanescu - 这本质上不是安全问题;这取决于你用它做什么。如果输入被采集并转义并包含在输出中,它将会很好。如果它没有逃脱,那么你可能会打开自己的攻击。 – 2013-06-03 13:52:27

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 - 所以你的答案真的不适用于给定的问题。 – Oliver 2013-04-29 12:59:52

+2

它不适用于这个问题,但我赞成,因为这是我不知道的选项。谢谢@Pavan – MickJuice 2014-08-14 13:31:53

0

努力当我们在提琴手得到同样的错误弄清楚为什么我们的Silverlight ArcGIS地图查看器没有加载地图。 在我们的案例中,它是代码中URL的拼写错误。出于某种原因,那里有一个等号。
HTTP:// = someurltosome /真棒/地方
代替
http://someurltosome/awesome/place

取出那个等号,它的工作很大(当然)之后。

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" /> 

在我的路线。配置是

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 
     ); 
相关问题