2011-11-12 67 views
2

使用MVC,EF 4.2。我正在研究一個有評論部分的應用程序。現在,如果用戶輸入包含HTML的評論,例如如何讓用戶輸入html註釋

<b>text</b> 

和點擊提交我得到的消息 「檢測到ptentially危險的Request.Form值...」

  1. 如何處理HTML的方式進入數據庫?我應該剝離HTML嗎?或者編碼它?我嘗試了server.htmlencode文本,但我仍然有相同的錯誤消息。

我看過關於此事的一些職位,其中包括一些在這裏SO - this onethis one

理想的情況下,我希望能夠讓html標籤數量有限,如EM強, 一個。反XSS,HTML敏捷性,某種BB代碼或降價樣式編輯器是否仍然是推薦的方式?我知道傑夫有一個白名單的代碼 - 但它已經有幾年了。

回答

1

你可以做

[ValidateInput(false)] 
public ActionResult foo() 
{ 
} 

,或者你可以用AllowHtml

public class Foo 
    { 
     [AllowHtml] 
     public string bar{ get; set; } 
    } 
+0

我看了那些屬性,但他們不會允許通過評論提交XSS和惡意代碼的可能性? –

+0

這是折衷的,如果你使用舊的視圖引擎(我忘了名字),你可以編寫'<%:Html.TextBoxFor%>'它會編碼這個值,或者如果你使用的是razor'@'語法它將編碼html – Rafay

+0

如果您擔心xss和其他代碼查看[Microsoft的Anti-XSS](http://wpl.codeplex.com/)庫 – Buildstarted

0

裝飾模型屬性您可能還需要設置你的web.config中requestValidationMode:

</system.web> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 

有關更多詳細信息,請參見this link

0

MVC有一個屬性,允許您指定一個屬性應該允許html而不會完全禁用驗證。這仍然是危險的,但它可以被限制在一個單一的財產,所以風險可以減輕。這裏是MSDN article for the AllowHtmlAttribute。該屬性的正確用法應該是裝飾適當的屬性在你的模型:

public class MyModel 
{ 
    public MyModel() 
    { 

    } 

    // Some other stuff in here 

    [AllowHtml] 
    [HttpPost] 
    public string MyHtmlString { get; set; } 

} 
0

我的允許HTML incomments解決辦法如下:

  1. AllowHtml上CommentText特性在我的評論類
  2. 允許一個狹窄的標籤子集。使用Html Sanitizer類擦除Html和不允許通過白名單的內聯腳本
  3. 然後將結果保存到db,因爲我通常會
  4. 在輸出時,使用Html.Raw在註釋中顯示Html