Javascript 从WebSocket解析JSON字符串有风险吗?
我正在编写一个Angular2 web应用程序,我希望与服务器进行双向通信,因此最好的解决方案是使用WebSocket Mozilla fundation使用Javascript 从WebSocket解析JSON字符串有风险吗?,javascript,json,security,websocket,xss,Javascript,Json,Security,Websocket,Xss,我正在编写一个Angular2 web应用程序,我希望与服务器进行双向通信,因此最好的解决方案是使用WebSocket Mozilla fundation使用JSON.stringify(msg)解析表示JSON消息的字符串,用于使用websocket发送和接收数据。这就引出了一些关于注射的想法。例如,假设以下JSON文档从服务器传输到客户机: { message{ from: "paul", text:"hello!", date:"01/01/2017" }
JSON.stringify(msg)
解析表示JSON消息的字符串,用于使用websocket发送和接收数据。这就引出了一些关于注射的想法。例如,假设以下JSON文档从服务器传输到客户机:
{
message{
from: "paul",
text:"hello!",
date:"01/01/2017"
}
}
现在假设paul将他的名字改为“paul\”,并发送以下文本:
,text: alert('xss'),something:"
那么客户端接收到的以下JSON将是:
{
message{
from: "paul\",
text:",text: alert('xss'),something:"",
date:"01/01/2017"
}
}
这实际上是以下JSON(刚刚重新排列):
这可能会导致问题,我想这取决于使用这个JSON做了什么。有什么方法可以防止这些事情发生,或者JSON.stringfy技术是安全的,因为当从JSON向DOM中插入数据时,文本属性将是未定义的,因为alert('xss')不是字符串(或者不返回任何内容)
另外,如果调用alert()之类的函数没有问题,我们可以将
something
变量设置为我们想要的任何值,这肯定是有风险的。JSON不能包含函数,所以它是安全的-您断言客户端接收的JSON可以包含text:alert('xss')
erroneous@JaromandaX好啊但是忽略警报,并确认我能够通过注入设置something属性也忽略警报
。。。好的,如果JSON不能包含函数,那么问题是什么呢。。。您使用了alert
作为示例函数,我也这样做了。。。JSON规范不是它可以包含除alert之外的任何函数它是它不能包含任何函数
,如果它被插入到DOM中
-为什么要“将JSON插入DOM”。。。JSON与DOM@Gatonito-你的代码会这样做-所以不要写愚蠢的代码:p
{
message{
from: "paul\",text:",
text: alert('xss'),
something:"",
date:"01/01/2017"
}
}