XSS风险发生在不可信内容进入可执行网页上下文时。留言、标题、文件名和后台富文本都需要考虑;删除某几个危险关键词并不是可靠防护。
根据输出位置处理
HTML文本、属性、脚本和URL是不同上下文,应使用对应编码及可靠模板机制。尽量避免把用户内容拼进脚本、样式或事件属性。前端插入内容时优先安全的文本接口。
富文本采用允许列表
确需保留格式时使用维护中的净化工具,限制标签、属性和URL协议。输入校验与输出处理共同使用,不能因为后台作者登录就允许所有脚本。上传SVG或HTML等内容也要考虑独立的执行风险。
业务校验不等于防XSS
长度、枚举与类型校验控制业务字段,输出编码控制呈现。允许的数据也可能包含需要编码的字符;过度过滤正常标点则会损坏用户内容。内容审核负责真实性与业务规则,不能替代技术处理。
复测覆盖不同显示位置
检查前台、管理列表、通知、搜索结果和错误提示,特别是同一字段多处展示。CSP可以增加防护,但不代替修复不安全输出。测试仅在授权环境中进行,不把攻击样例发布到真实客户页面。
参考资料
编码方式由输出位置决定
HTML正文、属性和脚本中的数据需要不同处理,富文本采用受控允许规则。
用实际输出页面测试,检查预览与后台同样处理,不能只在保存时删掉某个危险词。
例如留言在公开页安全但后台预览直接输出HTML,后台仍需正确处理输出。