2012-06-21 30 views
2

在我的控制我給了[ValidateInput(假)在我返回查看特定行動 我還附加了搜索關鍵字也 我的搜索關鍵詞是< HTML顯示從客戶端檢索到潛在危險的Request.QueryString值(search =「<html」)。在我的Razor視圖

我的網址外觀像 域名/客戶端?搜索= < HTML

在我看來

if (Request.QueryString.AllKeys.Contains("search")) 
{ 
string search = Request.QueryString["search"].ToString(); 
} 

然後顯示錯誤

從客戶端檢索到潛在危險的Request.QueryString值(search =「< html」)。 我如何糾正我的剃刀視圖中的這個錯誤?

回答

9

您需要設置requestValidationMode 2.0在你的web.config:

<httpRuntime requestValidationMode="2.0" /> 

或者使用視圖模型和[AllowHtml]屬性在這種情況下,你只允許指定屬性的字符:

public class SearchViewModel 
{ 
    [AllowHtml] 
    public string Search { get; set; } 
} 

和控制器動作:

public ActionResult Search(SearchViewModel model) 
{ 
    if (!string.IsNullOrEmpty(model.Search)) 
    { 
     string search = Model.Search; 
    } 

    ... 
} 

在這種情況下,您的web.config中既不需要[ValidateInput(false)]屬性也不需要requestValidationMode="2.0"

嘿,除此之外,你不再需要控制器動作中的魔法字符串:-)你正在直接使用模型。很酷,不是嗎?

+0

非常感謝它爲我工作,但通過查詢字符串搜索的價值是< html而不是

+0

這就是點@SreenathPlakkat。在查詢字符串中傳遞HTML是一種XSS漏洞。在響應中呈現搜索字符串會很糟糕。 .NET通過拋出異常來保護你的請求。所以,如果你正在爲它提供保護,你需要至少HTML解碼這些參數。 – Levitikon

相關問題