1. 什么是XSS注入
XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。
2. XSS攻击类型
2.1 存储型XSS
存储型XSS 是指攻击者通过输入恶意脚本,存储在服务器端的数据库中。当其他用户从数据库中读取数据时,恶意脚本被执行。
案例示例: 假设一个电商系统允许用户在其个人资料中输入“个人简介”:
用户提交的个人简介数据被存储在数据库中。如果用户输入恶意脚本:
当其他用户访问该用户的个人资料页面时,这段脚本会被执行。代码如下:
在这个例子中,bio内容直接插入到HTML中,导致脚本被执行。
防护措施:
对用户输入进行HTML转义。
在用户输入内容之前使用输入验证机制。
使用内容安全策略(CSP)来限制执行的脚本来源。
2.2 反射型XSS
反射型XSS 是指攻击者通过构造恶意URL,将其发送给用户。当用户点击这个URL时,恶意脚本被执行。攻击者利用URL中的参数直接在页面上插入恶意代码。
案例示例: 假设电商系统有一个搜索功能,用户可以通过URL中的查询参数来搜索商品:
// 从URL中获取查询参数
var searchQuery = new URLSearchParams(window.location.search).get('q');
// 直接插入到HTML中
document.getElementById('search').innerHTML = searchQuery;
如果攻击者通过如下链接引导用户:
http://example.com/search?q=
该脚本会在页面上执行。
防护措施:
对所有动态插入到HTML中的内容进行HTML编码。
使用安全的API进行参数插入,如 textContent 替代 innerHTML。