JavaScript特有的安全漏洞及渗透测试利用方法(通俗易懂)

任何编程语言和软件项目,都会存在安全漏洞,只有漏洞利用成本的高低!

本文章仅提供学习,切勿将其用于不法手段!


一、XSS跨站脚本攻击(最常见!)​

原理​:
攻击者通过注入恶意脚本(如<script>alert(1)</script>)到网页中,当用户访问时,浏览器会直接执行这些脚本,导致Cookie泄露、页面篡改等后果。
渗透测试利用方法​:

  1. 反射型XSS​:
    • 构造恶意链接:http://example.com/search?q=<script>alert(1)</script>
    • 用户点击链接后,脚本直接执行。
  2. 存储型XSS​:
    • 在评论/留言板输入<img src=x onerror=alert(document.cookie)>,其他用户查看时触发。
  3. DOM型XSS​:
    • 修改URL参数:http://example.com/#<script>alert(1)</script>,页面通过location.hash读取并执行。

防御​:

  • 对用户输入进行HTML转义(如<转成&lt;)。
  • 使用textContent代替innerHTML渲染内容。
  • 配置CSP(内容安全策略),禁止内联脚本。

二、CSRF跨站请求伪造(偷梁换柱)​

原理​:
攻击者诱导用户点击恶意链接或访问钓鱼页面,利用用户已登录的Cookie自动发送请求(如转账、修改密码)。
渗透测试利用方法​:

  1. GET型CSRF​:
    <!-- 伪造转账链接 -->
    <img src="http://bank.com/transfer?to=hacker&amount=10000">
  2. 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>
  3. 伪装登录​:
    • 伪造登录表单提交到真实网站,窃取用户凭证。

防御​:

  • 使用CSRF Token(随机令牌验证请求合法性)。
  • 设置Cookie的SameSite=Strict属性,禁止跨域携带。

三、JSON劫持(数据窃取)​

原理​:
攻击者通过重写JavaScript的ArrayObject构造函数,劫持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读取数据并直接渲染。
渗透测试利用方法​:

  1. ​**污染localStorage**​:
    localStorage.setItem('username', '<script>alert(1)</script>');
  2. 动态拼接HTML​:
    const userInput = "<img src=x onerror=alert(1)>";
    document.getElementById('content').innerHTML = userInput; // 直接渲染

防御​:

  • 避免使用innerHTML,改用textContent
  • localStorage等存储数据严格过滤。

五、Service Worker劫持(中间人攻击)​

原理​:
攻击者通过注册恶意Service Worker,拦截所有网络请求,窃取用户数据或篡改响应。
渗透测试利用方法​:

  1. 注册恶意SW​:
    navigator.serviceWorker.register('/evil-sw.js').then(() => {
      console.log("恶意Service Worker已注册");
    });
  2. 拦截请求​:
    // 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漏洞的“防身三招”

  1. 输入过滤​:所有用户输入必须转义或白名单校验。
  2. 安全配置​:
    // 示例:启用CSP
    res.setHeader('Content-Security-Policy', "default-src 'self'");
  3. 代码审计​:重点检查eval()innerHTMLfetch等高风险代码。

一句话口诀​:

跨域要限制,输入别乱接,脚本执行严把关,安全配置不能少!

注​:所有技术研究需遵循《网络安全法》及《数据安全法》相关规定,践行合法合规的网络安全技术探索

提示:最有效的防御办法,是让攻击者由于攻击成本过高,而主动放弃针对目标进行攻击!

没有攻不破的城墙,只有 由于 付出成本 远超于 收获价值 而 选择 主动放弃 攻击行为 的 敌人 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值