c# - AntiXSS 不会清理未封闭的 html 标签

标签 c# asp.net xss

为什么未封闭的 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/

相关文章:

c# - 解析 Visual Studio 解决方案文件

c# - MySql 连接字符串的 Sql 等效项 (C#)

c# - 如何从发布在同一 EC2 服务器上的 ASP.NET 网站访问 EC2 服务器上的 SQL Server 2012?

php - 文本输入卫生和安全

c# - 如何格式化模式输出

c# - XAML设计器因自注册ViewModel而崩溃

c# - ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

asp.net - 如何将 FormsAuthentication cookie 添加到 HttpClient HttpRequestMessage

javascript - 重定向到 Firefox 中的扩展资源

php - 外部图像漏洞