任何编程语言和软件项目,都会存在安全漏洞,只有漏洞利用成本的高低!
本文章仅提供学习,切勿将其用于不法手段!
一、XSS跨站脚本攻击(最常见!)
原理:
攻击者通过注入恶意脚本(如<script>alert(1)</script>)到网页中,当用户访问时,浏览器会直接执行这些脚本,导致Cookie泄露、页面篡改等后果。
渗透测试利用方法:
- 反射型XSS:
- 构造恶意链接:
http://example.com/search?q=<script>alert(1)</script> - 用户点击链接后,脚本直接执行。
- 构造恶意链接:
- 存储型XSS:
- 在评论/留言板输入
<img src=x onerror=alert(document.cookie)>,其他用户查看时触发。
- 在评论/留言板输入
- DOM型XSS:
- 修改URL参数:
http://example.com/#<script>alert(1)</script>,页面通过location.hash读取并执行。
- 修改URL参数:
防御:
- 对用户输入进行HTML转义(如
<转成<)。 - 使用
textContent代替innerHTML渲染内容。 - 配置CSP(内容安全策略),禁止内联脚本。
二、CSRF跨站请求伪造(偷梁换柱)
原理:
攻击者诱导用户点击恶意链接或访问钓鱼页面,利用用户已登录的Cookie自动发送请求(如转账、修改密码)。
渗透测试利用方法:
- GET型CSRF:
<!-- 伪造转账链接 --> <img src="http://bank.com/transfer?to=hacker&amount=10000"> - POST型CSRF:
<form action="http://bank.com/transfer" method="POST"> <input type="hidden" name="to" value="hacker"> <input type="hidden" name="amount" value="10000"> </form> <script>document.forms[0].submit();</script> - 伪装登录:
- 伪造登录表单提交到真实网站,窃取用户凭证。
防御:
- 使用CSRF Token(随机令牌验证请求合法性)。
- 设置Cookie的
SameSite=Strict属性,禁止跨域携带。
三、JSON劫持(数据窃取)
原理:
攻击者通过重写JavaScript的Array或Object构造函数,劫持JSON数据解析过程,窃取敏感信息。
渗透测试利用方法:
// 重写Array构造函数
Array = function() {
alert("窃取数据:" + JSON.stringify(arguments));
};
// 触发JSON请求时,数据会被拦截
fetch('/api/data').then(res => res.json());
防御:
- 响应头添加
X-Content-Type-Options: nosniff,禁止MIME类型嗅探。 - 使用
JSON.parse()时校验数据来源。
四、DOM型XSS(隐蔽攻击)
原理:
漏洞完全由前端JavaScript操作DOM时触发,无需服务器参与。例如从localStorage读取数据并直接渲染。
渗透测试利用方法:
- **污染
localStorage**:localStorage.setItem('username', '<script>alert(1)</script>'); - 动态拼接HTML:
const userInput = "<img src=x onerror=alert(1)>"; document.getElementById('content').innerHTML = userInput; // 直接渲染
防御:
- 避免使用
innerHTML,改用textContent。 - 对
localStorage等存储数据严格过滤。
五、Service Worker劫持(中间人攻击)
原理:
攻击者通过注册恶意Service Worker,拦截所有网络请求,窃取用户数据或篡改响应。
渗透测试利用方法:
- 注册恶意SW:
navigator.serviceWorker.register('/evil-sw.js').then(() => { console.log("恶意Service Worker已注册"); }); - 拦截请求:
// evil-sw.js self.addEventListener('fetch', event => { event.respondWith(fetch(event.request).then(res => { // 篡改响应内容 return new Response("被劫持了!", { status: 200 }); })); });
防御:
- 限制Service Worker注册范围(如仅允许
/trusted/路径)。 - 使用
Service-Worker-Allowed头设置作用域。
六、Web组件Shadow DOM绕过(数据泄露)
原理:
Shadow DOM本应隔离组件内部数据,但若未正确配置,攻击者可访问shadowRoot窃取信息。
渗透测试利用方法:
// 访问Shadow DOM内部元素
const shadow = document.querySelector('#my-component').shadowRoot;
const secretData = shadow.querySelector('.hidden-data').innerText;
防御:
- 设置Shadow DOM为
closed模式:element.attachShadow({ mode: 'closed' })。 - 避免在Shadow DOM中暴露敏感API。
七、CORS配置滥用(跨域数据窃取)
原理:
若服务器错误配置CORS(如Access-Control-Allow-Origin: *),攻击者可跨域读取敏感数据。
渗透测试利用方法:
// 恶意页面发起跨域请求
fetch('http://vulnerable.com/api/data')
.then(res => res.json())
.then(data => console.log(data));
防御:
- 严格限制
Access-Control-Allow-Origin为可信域名。 - 敏感接口添加
Authorization头验证。
总结:JavaScript漏洞的“防身三招”
- 输入过滤:所有用户输入必须转义或白名单校验。
- 安全配置:
// 示例:启用CSP res.setHeader('Content-Security-Policy', "default-src 'self'"); - 代码审计:重点检查
eval()、innerHTML、fetch等高风险代码。
一句话口诀:
跨域要限制,输入别乱接,脚本执行严把关,安全配置不能少!
注:所有技术研究需遵循《网络安全法》及《数据安全法》相关规定,践行合法合规的网络安全技术探索。
提示:最有效的防御办法,是让攻击者由于攻击成本过高,而主动放弃针对目标进行攻击!
没有攻不破的城墙,只有 由于 付出成本 远超于 收获价值 而 选择 主动放弃 攻击行为 的 敌人 !

被折叠的 条评论
为什么被折叠?



