HtmlSanitizer 使用指南
html-sanitizerAllowlist-based HTML cleaner项目地址:https://gitcode.com/gh_mirrors/html/html-sanitizer
项目介绍
HtmlSanitizer 是一个 .NET 库,专注于清理 HTML 片段和文档,以防止可能引发 XSS 攻击的构造。该库依赖于强大的 AngleSharp 解析器来处理、操作和渲染 HTML 和 CSS,确保不仅消除XSS风险,还能防范由不合规HTML标签导致的布局破坏或样式污染。它通过几个层级提供定制化配置,允许用户控制哪些HTML标签、属性、CSS规则以及URI方案被保留,从而适应不同的安全需求。
项目快速启动
安装
首先,您需要安装 HtmlSanitizer NuGet 包到您的项目中。可以通过NuGet包管理器命令完成:
Install-Package Ganss.Xss.HtmlSanitizer
使用示例
在您的代码中引入命名空间,并初始化 HtmlSanitizer
实例,然后对需要清理的HTML字符串调用 Sanitize()
方法。
using Ganss.Xss;
public void SanitizeExample()
{
var sanitizer = new HtmlSanitizer();
// 示例HTML,含有潜在的XSS攻击和不当CSS
string html = @"
<script>alert('xss');</script>
<div onload='alert('xss')'
style='background-color: rgba(0, 0, 0, 1);'>
Test<img src='test.png'
style='background-image: url(javascript:alert('xss')); margin: 10px;'>
</div>";
// 指定基础URI以解析相对路径
string sanitizedHtml = sanitizer.Sanitize(html, "https://www.example.com");
// 清理后的HTML应移除了脚本标签、onload事件和危险的CSS背景图像
string expected = @"
<div style='background-color: rgba(0, 0, 0, 1);'>
Test<img src='https://www.example.com/test.png'
style='margin: 10px;'>
</div>";
// 确保结果符合预期
Assert.AreEqual(expected, sanitizedHtml);
}
应用案例和最佳实践
- Web 应用: 在用户的输入显示到网页之前使用HtmlSanitizer处理,保障网站安全。
- 富文本编辑器: 集成到富文本编辑器中,保证导出的内容不含有恶意代码。
- API服务: 对接收到的包含HTML的数据进行清洗,以保护下游服务不受XSS攻击。
最佳实践:
- 初始化一个全局或单例的
HtmlSanitizer
实例并设置好默认规则。 - 根据不同场景调整
AllowedTags
,AllowedAttributes
, 和其他配置,保持最小权限原则。 - 总是提供一个基址以正确处理相对URL。
典型生态项目
虽然HtmlSanitizer本身是一个独立的组件,但其广泛应用于各种.NET生态系统中的web框架、CMS系统和任何处理用户提交的HTML内容的应用中。开发者通常将它集成到自己的项目中,作为安全过滤层,没有特定的“生态项目”与之直接关联,它的价值在于能够与其他众多.NET应用程序无缝配合,增强它们的安全性。
本指南提供了快速上手HtmlSanitizer的基本步骤,以及如何将其有效融入您的开发实践中。了解更详细的信息和高级用法,请参考官方GitHub仓库。
html-sanitizerAllowlist-based HTML cleaner项目地址:https://gitcode.com/gh_mirrors/html/html-sanitizer