2011-05-17 121 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 
     ); 
相關問題