我的頁面中有一個textarea,它是一個HTML輸入字段。其目的是允許用戶註冊一個確認的HTML,在發生特定操作後將在用戶的瀏覽器中顯示。您可以將它想象成paypal確認後付款的東西,並將您重定向到一個網站,上面寫着「感謝您的購買」。這已經實現了,但現在我正在考慮用戶的安全性(XSS/SQL注入)。將html保存到數據庫的安全方法
我想知道的是如何在我的控制器後動作中安全地過濾掉某些html標記,所以如果我檢測到HTML內部存在惡意HTML,我將在保存之前停止執行。現在我在做這樣的:
[CustomHandleError]
[HttpPost]
[ValidateAntiForgeryToken]
[AccessDeniedAuthorize(Roles = "Admin,CreateMerchant")]
public ActionResult Create(MerchantDTO merchantModel)
{
if (ModelState.IsValid)
{
if (!IsSafeConfirmationHtml(merchantModel.ConfirmationHtml))
{
ModelState.AddModelError("ConfirmationHtml", "Unallowed HTML tags inputted");
return View("Create", merchantModel);
}
.
.
.
}
}
和我IsSafeConfirmationHTML被定義爲
private bool IsSafeConfirmationHtml(string html)
{
if (html.ToLower().Contains("<script") || html.ToLower().Contains("<embed") || html.ToLower().Contains("<object"))
{
return false;
}
return true;
}
是否有一個更聰明,更清潔的方式做到這一點?我的意思是,我不希望得到阻止「對象」,「腳本」等字樣的誤報,但是我也不想被編碼將「<」翻譯爲「%3C」等的編碼愚弄。 ..
Ontopic:標籤內的間距是否有效?例如:<script> alert("1"); </script >
?