跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

C#怎么清洗HTML标签_C# HtmlSanitizer防御XSS跨站脚本【实用】

正则过滤无法防御XSS,必须用HTML解析器白名单清洗;HtmlSanitizer是C#最可靠的方案,自动剥离事件属性和危险协议,而HtmlAgilityPack仅适合解析非安全场景。 别用正则删
<.*?>
做 XSS 防御——它根本拦不住
这类 payload。 真正防 XSS 的清洗,必须基于 HTML 解析器做白名单控制,而不是字符串替换。 HtmlSanitizer 是目前 C# 里最靠谱的 XSS 防御库 它不是“去标签”,而是按规则保留安全子集:默认只放行

、
、
(且自动过滤
href
中的
javascript:
)、
(且校验
src
协议),所有事件属性(
onload
、
onclick
等)和危险协议(
data:
、
vbscript:
)一律剥离。 安装:
Install-Package HtmlSanitizer
基础用法: 立即学习 “ 前端免费学习笔记(深入) ”;
var sanitizer = new HtmlSanitizer(); sanitizer.AllowedTags.Add("article"); // 手动加允许标签 sanitizer.AllowedAttributes.Add("cite"); // 允许 cite 属性 string clean = sanitizer.Sanitize(dirtyHtml);
关键点: 默认不放行
→ 必须先
WebUtility.HtmlDecode
两次,再进
HtmlSanitizer
UTF-8 BOM(
\uFEFF
)会导致
HtmlSanitizer
解析失败,报错
Unexpected token
→ 读取时用
new StreamReader(stream, Encoding.UTF8, detectEncodingFromByteOrderMarks: true)
Word 粘贴内容含大量
mso-*
样式和冗余
标签 →
HtmlSanitizer
默认不清理这些,需配合
AllowedCssProperties.Clear()
和自定义
CssClassWhitelist
清洗不是一步到位的动作,而是按数据来源分层:先解码,再 BOM 处理,再 sanitizer,最后才是业务逻辑裁剪。

相关文章