ValidateInput(false) 與 AllowHtml
我有一個用於創建備忘錄的表單,為此我使用富文本編輯器提供一些樣式,這會創建 html 標記以應用樣式。當我發布該文本時,mvc 會引發錯誤以防止潛在的危險腳本,因此我必須明確允許它。
我找到了兩種方法,一種是用 . 裝飾控制器方法,
[ValidateInput(false)]另一種是ViewModel用[AllowHtml]. 對我來說,[AllowHtml]看起來好多了,但我發現這種方法只使用了 1 次,而且[ValidateInput(false)]似乎是首選方法。我應該使用哪種方法,兩者之間有什麼區別?
ValidateInput 和 AllowHTML 與XSS安全問題直接相關。
因此,讓我們首先嘗試了解 XSS。
XSS(跨站點腳本)是一種安全攻擊,攻擊者在進行數據輸入時注入惡意程式碼。現在好消息是,在 MVC 中預設情況下會阻止 XSS。因此,如果有人試圖發布 JavaScript 或 HTML 程式碼,他會出現以下錯誤。
但在實時情況下,必須允許使用 HTML,例如 HTML 編輯器。因此,對於這些場景,您可以使用以下屬性來裝飾您的操作。
[ValidateInput(false)] public ActionResult PostProduct(Product obj) { return View(obj); }但是等等,這裡有一個問題。問題是我們已經允許 HTML 出現在可能很危險的完整動作上。因此,如果我們能夠對欄位或屬性級別進行更精細的控制,這將真正創建一個整潔、專業的解決方案。
這就是 AllowHTML 有用的地方。您可以在下面的程式碼中看到我在產品類屬性級別上修飾了“AllowHTML”。
public class Product { public string ProductName { get; set; } [AllowHtml] public string ProductDescription { get; set; } }因此,總結“ValidateInput”允許在操作級別發布腳本和 HTML,而“AllowHTML”則在更精細的級別上。
我會建議更多地使用“AllowHTML”,直到你非常確定整個動作需要是赤裸裸的。
我建議您閱讀部落格文章*使用 ValidateInput 和 AllowHTML 在 ASP.NET MVC 中防止 XSS 攻擊,*其中通過範例逐步展示了這兩個屬性的重要性。
