ZBLOG

攻击者如何通过构造恶意 URL 注入任意 JavaScript 代码

攻击者可以通过构造恶意 URL 注入任意 JavaScript 代码,具体步骤如下:


1. 漏洞利用原理

原代码中动态拼接了 location.href 的参数值到 HTML 中:

  1. document.write('<option value=1>' + location.href.substring(location.href.indexOf('default=') + 8) + '</option>');

如果 URL 中的 default= 参数包含恶意脚本,浏览器会将其解析为可执行的 JavaScript。


2. 攻击步骤

场景示例

假设正常 URL:

  1. https://example.com/page.html?default=en

渲染结果为:

  1. <select>
  2. <option value=1>en</option> <!-- 正常输出 -->
  3. <option value=2>English</option>
  4. </select>

攻击者构造的恶意 URL

default= 参数改为以下内容(URL编码可选):

  1. https://example.com/page.html?default=</option></select><script>alert('XSS')</script>

或编码后:

  1. https://example.com/page.html?default=%3C/option%3E%3C/select%3E%3Cscript%3Ealert('XSS')%3C/script%3E

最终生成的恶意 HTML

  1. <select>
  2. <option value=1></option></select><script>alert('XSS')</script></option>
  3. <option value=2>English</option>
  4. </select>

浏览器会解析并执行 <script>alert('XSS')</script>,导致 XSS。


3. 关键攻击手段

  • 闭合标签:通过 </option></select> 提前结束原有标签,释放上下文。
  • 注入脚本:插入 <script> 或其他可执行代码(如 <img src=x onerror="alert(1)">)。
  • 绕过过滤:使用编码、换行符或特殊字符混淆(如 \u003cscript\u003e)。

4. 潜在危害

  • 窃取数据:通过 document.cookie 盗取用户会话。
  • 钓鱼攻击:伪造登录页面。
  • 蠕虫传播:自动转发恶意 URL。

5. 防御措施

(1)输入转义

对动态内容进行 HTML 实体编码:

  1. function escapeHTML(str) {
  2. return str.replace(/[&<>'"]/g,
  3. tag => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[tag]));
  4. }
  5. const safeParam = escapeHTML(urlParam);

(2)使用安全 API

避免直接操作 HTML,改用 DOM API:

  1. const select = document.querySelector('select');
  2. const option = document.createElement('option');
  3. option.textContent = urlParam; // textContent会自动转义
  4. select.appendChild(option);

(3)白名单验证

仅允许预定义的参数值:

  1. const allowedValues = ['en', 'zh'];
  2. if (!allowedValues.includes(urlParam)) {
  3. urlParam = 'en'; // 默认值
  4. }

(4)启用 CSP(内容安全策略)

HTTP Header 限制脚本来源:

  1. Content-Security-Policy: default-src 'self'; script-src 'self'

总结

  • 攻击本质:利用未转义的动态内容篡改 DOM。
  • 修复核心:始终对用户输入进行转义或隔离(如 Shadow DOM)。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23117

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?