为什么未封闭的 html 标签未使用 Microsoft AntiXSS 进行清理?
string untrustedHtml = "<img src=x onmouseover=confirm(foo) y=";
string trustedHtml = AntiXSS.Sanitizer.GetSafeHtmlFragment(untrustedHtml); // returns "<img src=x onmouseover=confirm(foo) y="
结束标签已清理:
string untrustedHtml = "<img src=x onmouseover=confirm(foo) y=a>";
string trustedHtml = AntiXSS.Sanitizer.GetSafeHtmlFragment(untrustedHtml); // returns ""
最佳答案
建议尽可能使用 HTML 编码而不是 HTML 卫生。 仅当您确实需要使用某些 HTML 但想要删除任何不安全代码时才应使用 Sanitation。 99% 的情况下,您不需要用户插入任何 HTML,而应该通过编码来消除这种情况。
话虽如此,如果您仍然想进行清理,AntiXSS 并不是最好的解决方案 - 不仅因为上面的示例,而且它还删除了完全安全的 HTML 并错误地将其识别为不安全,导致 AntiXSS 清理程序无效。 Ajax 控制工具包有一个更好的内部清理程序,您可以使用,但请注意,它的安全性较低,因为它们部分地与黑名单一起工作(搜索危险代码而不是仅允许安全代码)。
如果您仍想使用 AntiXSS 清理功能,只需在发送到清理程序之前检查插入的 HTML 是否有效即可。例如,您可以使用某种 XML 文档类来做到这一点,因为任何有效的 HTML 也是有效的 XML。
希望这有帮助。
关于c# - AntiXSS 不会清理未封闭的 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28276142/