innerHTML插入script代码为什么不会被XSS

  1. HTML5不会执行由innerHTML插入的<script>标签内的代码。
  • 测试代码
window.onload = function () {
    let str = "<script>alert(1)</script>"
    document.getElementById('div').innerHTML = str
}

image

  1. innerHTML插入内容不确定的字符串时仍然存在安全风险。
  • 测试代码
<!DOCTYPE html>
<meta charset="utf-8">
<head>
    <title>
        innerHTML测试
    </title>
    <script>
        window.onload = function () {
            document.cookie = 'sessionid=5f74be5f82044e6a8d06b415bf96fdb4;path=/'
        }
        function test() {
            // 弹出消息
            document.getElementById('div').innerHTML = `<img src='x' onerror='alert(1)'>`;
            // 读取cookie
            // document.getElementById('div').innerHTML = `<img src='x' onerror='alert(document.cookie)'>`;
            // 跳转
            // document.getElementById('div').innerHTML = `<img src='x' onerror='document.location.href = "http://www.baidu.com"'>`;
        }
    </script>
</head>
<body>
    <button onclick="test()">点我购买</button>
    <div id='div'>hello</div>
</body>
</html>
  • XSS效果

a. 弹出消息
image

b. 跳转
image

c. 读取cookie
image

  1. 插入纯文本时建议不要使用innerHTML,用textContent取而代之。
document.getElementById('div').textContent = `<img src='x' onerror='document.location.href = "http://www.baidu.com"'>`;

可以看到,textContent是将代码原样显示出来而不是当作脚本执行
image

posted @   chyun2011  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示