清理 Sanitize
文本、URL 与 HTML 清理
sanitize 用于清理不可信输入。它可以清理纯文本、URL 和 HTML,HTML 策略基于命名 Policy 选择。
安装
go get github.com/duxweb/runa/sanitize
文本清理
value := sanitize.Text("<b>Hello</b>\x00")
Text 会去掉 HTML 标签和控制字符,适合用户昵称、标题等纯文本字段。
URL 清理
safe := sanitize.URL("https://example.com/a")
blocked := sanitize.URL("javascript:alert(1)")
_ = safe
_ = blocked
不安全协议会返回空字符串。
HTML 策略
plain := sanitize.HTML(input, sanitize.PlainText())
strict := sanitize.HTML(input, sanitize.Strict())
rich := sanitize.HTML(input, sanitize.RichText())
markdown := sanitize.HTML(input, sanitize.Markdown())
Strict()默认安全策略,移除危险标签和属性RichText()保留常见富文本标签Markdown()保留代码块等 Markdown 输出常见结构PlainText()转成纯文本
自定义策略
sanitize.Register("custom", sanitize.Strict())
value := sanitize.HTML(input, sanitize.Use("custom"))
常见错误
只在前端清理输入
前端清理不能代替后端清理。所有不可信输入进入数据库或 HTML 前,都应在后端做校验和清理。
富文本用 Text 清理
Text 会去掉 HTML 标签。富文本内容应使用 sanitize.HTML 和合适策略。
清理等于权限控制
sanitize 只能降低 XSS 和脏数据风险,不能替代鉴权、权限检查和业务校验。
API 速查
sanitize.Text(input)清理纯文本sanitize.URL(input)清理 URLsanitize.HTML(input, policies...)清理 HTMLsanitize.Register(name, policy)注册命名策略sanitize.Use(name)使用命名策略