2011-09-02 117 views
3

我得到「潛在危險的Request.Form值」

從客戶端

當我部署我的應用程序(錯誤仍無法檢測到有潛在危險的Request.Form值的誤差當我通過localhost運行時發生)。

它在提交表單時發生,因爲其中一個字段包含HTML。我在模型中添加了[AllowHtml],該模型對應於違規表單字段,但這似乎不起作用。

由於顯而易見的原因,我寧願不在行爲方法上使用[ValidateInput(false)],而且無論如何,這似乎也不起作用。

有沒有其他需要做的配置?我已閱讀,添加

<httpRuntime requestValidationMode="2.0"/> 

到網絡配置文件可以修復它,但我又不想加入,因爲我仍然希望我的應用程序的其他部分的安全驗證。

任何想法?

回答

8

[AllowHtml]需要您添加 <httpRuntime requestValidationMode="2.0"/>(設置這個值並不意味着你沒有得到安全驗證,它只是驗證模式)。該網站的其他部分將是安全的,您只對視圖模型上的特定屬性禁用驗證。

[ValidateInput(false)]會工作,但正如您所說,它可能不太安全,因爲它禁用所有屬性的驗證。

我會堅持[AllowHtml]


UPDATE:

兩個[AllowHtml][ValidateInput(false)]工作開箱即用的ASP.NET MVC 3沒有在web.config中添加<httpRuntime requestValidationMode="2.0"/>的要求。這是必要的,ASP.NET MVC 2的運行ASP.NET 4.0

在這裏有一個例子:

視圖模型:

public class MyViewModel 
{ 
    [AllowHtml] 
    public string Text { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      Text = "<html/>" 
     }; 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

查看:

@model MyViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.TextAreaFor(x => x.Text) 
    <input type="submit" value="OK" /> 
} 

提交表單時不會引發異常。

+0

好吧,那麼是否使用允許在沒有應用程序抱怨的情況下提交HTML? – MichaelS

+0

@MichaelS,正如我所說'[AllowHtml]'需要你添加它才能工作。另一種方法是在你的動作中使用'[ValidateInput(false)]'屬性。 –

+0

它沒有提到要求在下面的教程的XSS部分補充一點:http://www.pluralsight-training.net/microsoft/players/PSODPlayer.aspx?author=scott-allen&name=mvc3-building-security&mode =實況剪輯= 0&當然= aspdotnet-MVC3-介紹,你可以去這裏:http://www.asp.net/mvc爲了記錄在案,我的模型結合,因爲它表明在視頻... – MichaelS

相關問題