element.innerHTML所涉及的安全问题

众所周知,innerHTML属性是在IE4引入的,很多浏览器也支持它很长一段时间,HTML5的到来才使它得以标准化。

innerHTML在MDN上的解释为:

The Element.innerHTML property sets or gets the HTML syntax describing the element's descendants.

也就是可以设置和获取HTML语法表示的元素后代,获取就不多说了,但是设置可能会引发安全问题:

element.innerHTML="<script>console.log('hello')</script>";

即在元素后代中插入脚本,这个可能会给类似XSS攻击“留了一手”,像上面的例子其实并不会执行嵌入的js脚本,MDN上也指出“HTML5 specifies that a <script> tag inserted via innerHTML should not execute.”。

所以,业界并不推荐用innerHTML插入文本,而用node.textContent替代。

posted @ 2018-02-09 19:59  linweiws  阅读(926)  评论(0编辑  收藏  举报