题目
解释跨站脚本攻击(XSS)及其防御方法
信息
- 类型:问答
- 难度:⭐
考点
XSS攻击原理,输入输出处理,防御措施
快速回答
跨站脚本攻击(XSS)是攻击者向网页注入恶意脚本的攻击方式。防御核心方法:
- 对用户输入进行严格过滤和转义
- 使用内容安全策略(CSP)
- 避免直接使用
innerHTML等危险API - 设置
HttpOnly标志保护Cookie
1. XSS攻击原理
XSS(Cross-Site Scripting)指攻击者在网页中注入恶意脚本,当其他用户访问时脚本执行,从而窃取Cookie、会话令牌或篡改页面内容。主要分为三类:
- 存储型XSS:恶意脚本永久存储在服务器(如评论区)
- 反射型XSS:恶意脚本通过URL参数传递并即时返回
- DOM型XSS:前端JavaScript直接操作DOM时触发
2. 防御措施与代码示例
(1) 输入过滤与输出转义
原则:对所有不可信数据(用户输入、URL参数等)在输出到HTML前进行转义
// JavaScript 示例:使用textContent代替innerHTML
const userInput = "<script>alert('xss')</script>";
document.getElementById('output').textContent = userInput; // 安全
// 服务端转义示例(Node.js)
const escaped = userInput
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');(2) 内容安全策略(CSP)
通过HTTP头限制脚本来源:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;(3) HttpOnly Cookie
防止JavaScript访问敏感Cookie:
Set-Cookie: sessionId=abc123; HttpOnly; Secure3. 最佳实践
- 使用安全框架(如React的JSX自动转义、Vue的v-text)
- 避免拼接HTML:使用
createElement或模板引擎 - 对富文本使用白名单过滤(如DOMPurify库)
4. 常见错误
- 仅在客户端转义(需同时服务端转义)
- 使用
innerHTML = userContent直接插入内容 - 忽略URL参数、HTTP头等非表单输入源
5. 扩展知识
- XSS与CSRF区别:XSS利用用户对站点的信任,CSRF利用站点对用户的信任
- 现代浏览器防护:Chrome内置XSS Auditor(已弃用),现主要依赖CSP
- 测试工具:使用OWASP ZAP或Burp Suite进行漏洞扫描