1. 严格实施输入验证与过滤
对所有用户输入数据实施白名单验证机制,推荐使用正则表达式或专业库(如OWASP ESAPI):
// 示例:使用DOMPurify库过滤
const clean = DOMPurify.sanitize(userInput, {
ALLOWED_TAGS: ['b', 'i', 'em'],
FORBID_ATTR: ['style', 'onerror']
});
- 数据类型校验:对数字、邮箱等字段使用严格格式验证
- 特殊字符限制:禁止输入尖括号、引号等危险符号
2. 强制输出编码
根据输出上下文采用不同的编码方式:
上下文类型 | 编码方式 |
---|---|
正文 | 实体编码(< → <) |
属性 | 双引号包裹+属性编码 |
JavaScript | Unicode转义序列 |
现代框架如React/Vue已内置自动转义机制,但需注意dangerouslySetInnerHTML
等特殊场景。
3. 部署内容安全策略(CSP)
通过HTTP头定义可信资源来源:
Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline' cdn.trusted.com;
style-src 'self' 'unsafe-inline';
img-src data:;
frame-ancestors 'none'
关键配置项:
- 禁用内联脚本(
unsafe-inline
) - 限制外部资源域名
- 禁止框架嵌套(
frame-ancestors
)
4. 设置HttpOnly和Secure Cookie
防止JavaScript读取敏感Cookie:
// Express示例
res.cookie('sessionID', token, {
httpOnly: true,
secure: true,
sameSite: 'Strict'
});
同时建议:
- 启用SameSite属性防止CSRF
- 会话令牌定期轮换
5. 启用X-XSS-Protection头部
虽然现代浏览器逐渐废弃该机制,但仍可作为基础防护:
X-XSS-Protection: 1; mode=block
配合以下头部增强防护:
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
6. 前端框架安全实践
主流框架的安全注意事项:
7. 定期安全审计与测试
建议组合以下检测手段:
- 自动化扫描:使用OWASP ZAP/Burp Suite进行漏洞扫描
- 代码审计:检查所有用户输入处理逻辑
- 渗透测试:模拟攻击者尝试注入payload
推荐每季度至少执行一次全面安全评估。
总结
有效防御XSS需要纵深防御策略,从输入处理到输出渲染全链路管控。结合文中7项措施,可将XSS风险降低90%以上。企业应根据技术栈特点,制定细化的安全开发规范。
评论