防范措施
XSS 这类问题,单靠'记住不要拼接字符串'不够。项目里更稳妥的做法,通常是自己封装一层通用处理,或者直接用成熟库,把输出前的清洗统一起来。下面这几种方案,基本覆盖了常见场景。
1. layui util
Layui 的 util.escape() 主要做 HTML 转义。它会把危险字符替换成实体,让浏览器只当文本看,不再解析成标签或脚本。对反射型和存储型 XSS,这一步通常就能挡住大半。
核心转义的特殊字符
它会处理 HTML 里最容易被拿来做注入的几个字符:
| 原始字符 | 转义后 | 说明 |
|---|---|---|
< | < | 标签开始标识 |
> | > | 标签结束标识 |
" | " | 属性值包裹 |
' | ' | 属性值包裹 |
& | & | 实体起始标识 |
像 <script>alert('XSS')</script> 这种内容,转义后就只剩文本了,页面不会执行它。
示例
layui.use('util', function(){
var util = layui.util;
// 模拟用户输入的恶意内容
var maliciousContent = '<script>alert("XSS 攻击");</script><a href="javascript:evil()">恶意链接</a>';
// 转义处理
var safeContent = util.escape(maliciousContent);
console.log(safeContent);
// 插入页面时仅显示文本
document.getElementById('content').innerText = safeContent;
});
2. js-xss 库
js-xss 更像是给富文本准备的。它不是简单把所有字符都转义掉,而是按规则保留安全标签,删掉危险标签和属性,适合评论、文章内容、编辑器输出这类场景。
