使用快速框架 -
我正在将一个初始JSON状态表示加载到我的模板中,我的反应前端将重新初始化其初始状态,但我想知道这样做是否安全 -
<script type="text/javascript">
window.INIT_DATA = <%- initialState %>
</script>
如果我查看页面源,那么输出可能看起来像这样 -
<script type="text/javascript">
window.INIT_DATA = {"recentImages": [ 11342, 11344, 11432 ], "lastOnline": "Yesterday"}
</script>
这样做安全吗?有没有好的做法可以遵循?感谢
答案 0 :(得分:0)
不,这不安全。假设initialState
包含一个如下所示的字符串:
"hello! </script><script>alert("PWND")</script>"
这将导致嵌入代码运行。换句话说:如果您要嵌入的JSON包含任何用户提供的字符串,那么您就可以打开XSS攻击的大门。
要防止这种情况发生,请将</
替换为<\/
,将<!--
替换为<\!--
。在JSON字符串中,\/
和\!
将被解释为简单的斜杠或感叹号,因此这不会改变JSON的语义,但它会阻止HTML解析器看到关闭标签
答案 1 :(得分:-2)
我不知道为什么这不安全?但是我建议你不要将变量存储在window对象中;不鼓励它,因为窗口是一个全局对象。