XSS(跨站脚本攻击)详解
目录
一、XSS漏洞简介
二、XSS漏洞类型
(一) 反射型XSS
(二) 存储型XSS
(三) DOM型XSS
三、XSS漏洞的危害
四、XSS攻击的防御方法
一、XSS漏洞简介
XSS(Cross-Site Scripting,跨站脚本攻击)漏洞,攻击者将恶意脚本注入到Web页面中,当用户访问这些页面时,恶意脚本会在用户的浏览器中执行,可能导致数据泄露、会话劫持或钓鱼攻击等安全问题。
二、XSS漏洞类型
(一) 反射型XSS
恶意脚本通过URL参数等一次性传递给服务器,页面加载时立即执行。
常见漏洞位置:URL 参数、HTTP 头部(Referer/User-Agent)等。
(二) 存储型XSS
恶意脚本被存储在服务器端(如数据库),每次用户访问页面时都会执行。
常见漏洞位置: 评论系统、论坛、留言板、昵称、商品描述等。
(三) DOM型XSS
DOM(文档对象模型)是浏览器用来表示网页结构的模型,JavaScript可以通过操作DOM动态修改网页的内容、结构和样式。
DOM XSS不依赖于服务器端的漏洞,而是利用客户端JavaScript代码中的缺陷,在用户的浏览器中执行恶意脚本。
常见漏洞位置:location.hash、location.search、document.referrer、innerHTML、eval() 等。
三、XSS漏洞的危害
- 盗取用户 Cookie / Session
- CSRF 辅助攻击
- 挂马(植入钓鱼链接)
- 弹窗、修改页面内容
- 传播XSS蠕虫
四、XSS攻击的防御方法
- 输入过滤和验证
对所有用户输入(如表单、URL参数、Cookie等)进行严格的过滤和验证,只允许符合预期格式的数据通过。
- 使用白名单验证(只接受特定字符或格式,例如只允许字母和数字)。
- 移除或转义潜在的恶意字符(如 <、>、" 等)。
- 输出编码
在将动态数据输出到HTML、JavaScript、CSS等上下文时,对数据进行适当的编码,确保其被视为纯文本而非可执行代码。
- HTML上下文:使用HTML实体编码(如将 < 转换为 <)。
- JavaScript上下文:使用JavaScript转义(如将 ' 转换为 \')。
- CSS上下文:避免直接输出用户输入,或使用CSS转义。
- 使用内容安全策略(CSP)
通过HTTP头配置CSP,限制脚本的执行来源,防止未经授权的脚本运行。
- 设置脚本白名单:Content-Security-Policy: script-src 'self' https://trusted.com
- 禁用内联脚本:禁止使用 <script> 标签直接嵌入代码。
- HTTP-only Cookies
将Cookie设置为HTTP-only,防止JavaScript通过document.cookie访问。
- 在服务端设置Cookie时添加HttpOnly标志。
注:此功能仅保护Cookie,无法防御其他XSS攻击。