ASP.NET MVC 頁面使用富文本控件的XSS漏洞問題

目前在作的項目存在XSS安全漏洞!安全

緣由是有一些頁面使用了富文本編輯框,爲了使得其內容能夠提交,爲相關action設置了[ValidateInput(false)] 特性:markdown

[HttpPost]
        [ValidateInput(false)]
        public ActionResult MailPreview(FormCollection collection)
        {
            return View();
        }

但問題來了,同一頁面還有其餘字段內容,如今HTML、js腳本都能提交,再也不受限,要麼提交的時候所有都檢查,不然就有XSS漏洞。我在某個文本框裏輸入<script>alert(0);</script>,提交成功後,頁面展現提交內容,竟然執行了!spa

因此說,千萬當心不能輕易開啓這個[ValidateInput(false)] 特性。我以爲根本就不該該開啓。能夠醬紫:code

public class MailVM
    {
        public string Title { get; set; }
        public string Time { get; set; }
        [AllowHtml]
        public string Mess { get; set; }
    }

針對這個實體類的單個字段設置 [AllowHtml] ,這樣提交的時候,系統就會放過該字段。orm

問題是,action不能使用 FormCollection 來接收提交數據,而應該使用實體類。不然[AllowHtml]特性不起做用。究其原理,這種檢查應該是系統的過濾器在攔截,你一個FormCollection,過濾器怎麼着力?因此,上面的代碼應改成:ip

[HttpPost]
        public ActionResult MailPreview(MailVM model)
        {
            return View();
        }

用實體類固然沒有FormCollection靈活,不過對於這種特定場合,仍是必須的。特別提一下,實體類能夠只在提交的時候使用,頁面輸出時並不要求綁定實體類,頁面的文本框等控件,也不必定要寫成 @Html.TextBoxFor 這種形式。只須要get

[HttpPost]
        public ActionResult MailPreview(MailVM model)
        {
            ……
        }

系統會自動按照model來裝配提交數據。string

相關文章
相關標籤/搜索