我的页面中有一个文本区域,它是一个 HTML 输入字段。其目的是允许用户注册一个确认 HTML,该 HTML 将在执行特定操作后显示在其用户的浏览器中。您可以将其想象为付款后对贝宝的确认,并将您重定向到一个显示“感谢您的购买”的网站。这已经实现了,但现在我正在考虑用户的安全性(XSS/SQL 注入)。
我想知道的是如何<script> <embed> <object>
在我的控制器发布操作中安全地过滤掉某些 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 >
?