通过脚本标记将JSON插入HTML - 这样安全吗?

时间:2017-09-30 21:50:25

标签: json node.js express

使用快速框架 -

我正在将一个初始JSON状态表示加载到我的模板中,我的反应前端将重新初始化其初始状态,但我想知道这样做是否安全 -

<script type="text/javascript">
  window.INIT_DATA = <%- initialState %>
</script>

如果我查看页面源,那么输出可能看起来像这样 -

<script type="text/javascript">
  window.INIT_DATA = {"recentImages": [ 11342, 11344, 11432 ], "lastOnline": "Yesterday"}
</script>

这样做安全吗?有没有好的做法可以遵循?感谢

2 个答案:

答案 0 :(得分:0)

不,这不安全。假设initialState包含一个如下所示的字符串:

"hello! </script><script>alert("PWND")</script>"

这将导致嵌入代码运行。换句话说:如果您要嵌入的JSON包含任何用户提供的字符串,那么您就可以打开XSS攻击的大门。

要防止这种情况发生,请将</替换为<\/,将<!--替换为<\!--。在JSON字符串中,\/\!将被解释为简单的斜杠或感叹号,因此这不会改变JSON的语义,但它会阻止HTML解析器看到关闭标签

答案 1 :(得分:-2)

我不知道为什么这不安全?但是我建议你不要将变量存储在window对象中;不鼓励它,因为窗口是一个全局对象。