Skip to main content

14.script 标签的某些属性中

早期的前端开发人员在写代码时通常会用到 innerHTML() 方法,innerHTML会把字符串转成 HTML 代码片段渲染到页面上,实际上这个方法是存在很大漏洞。

示例代码:#

<div>Hello <p id='name'></p><br>Here are photo for U! <br><script>document.getElementById('name').innerHTML = 'OrdinaryVisitor'</script></div>

攻击示例:#

<script>alert(123)</script>

结果竟然发现没有弹窗?

HTML 5 中指定不执行由 innerHTML 插入的<script>标签。然而,有很多不依赖<script>标签去执行 JavaScript 的方式,这仍是一个安全问题。

可以利用 img 中的 onerror 来达到触发的效果

<img src=x onerror="alert(/xss/)">

因此,不要过度使用innerHTML方法,在使用前应考虑一下会不会对程序造成危害。如果一个用户输入的内容直接由innerHTML操办,那很可能是危险的。使用innerHTMLouterHTML时要注意,标签需不进行编码处理,可能会导致 XSS。

防御措施:#

  • 不要直接使用 innerHTML 来插入 HTML 内容,可以使用 createElement 和 appendChild 等方法来创建和添加元素,或者使用 innerText 或 textContent 等属性来设置文本内容。

靶场演示: 视频#