我们有一个在第三方网站上运行的“小部件”,即任何注册我们服务并嵌入JavaScript的人。
目前我们使用JSONP进行所有通信。我们可以通过使用iFrame安全地签名并创建帐户,并在其上检测加载事件。 (基本上,我们要等到iFrames源指向客户端域,然后才能从其标题中读取成功值。)
因为我们在JSONP上运行,所以我们可以使用浏览器HTTP cookie来检测用户是否已登录。
但是,我们正在将系统转换为实时运行和通过Web套接字运行。我们仍然会使用相同的身份验证方法,但我们不一定会使用JSONP进行其他调用。相反,这些调用将通过websockets进行(使用库Faye)
我如何确保这一点?潜在的安全漏洞是,如果有人将JavaScript从现有网站上复制出来,改变它,那么就会让人们访问他们的网站。我认为这违背了我在登录时发回安全令牌的最初想法,因为恶意JavaScript能够读取它然后使用它执行经过身份验证的操作。
我最好通过常规JSONP和我在WebSockets上的更新来保持我的安全操作吗?
答案 0 :(得分:4)
Websocket连接仅在打开握手期间接收cookie。唯一可以访问websocket连接的站点是打开它的站点,因此如果您在身份验证后打开连接,那么我认为您的安全性将与您当前的JSONP实现相当。
这并不是说您的JSONP实现是安全的。我不知道它不是,但是你是否在检查你的JSONP请求的引荐来确保他们真的来自登录的同一个第三方网站?如果没有,您已经存在嵌入javascript的其他网站的安全问题。
在任何情况下,具有XSS漏洞的第三方也会a very big problem,但可能您已经知道了。
答案 1 :(得分:0)
是否在浏览器打开WebSocket握手期间发送了cookie(如果是,那么什么cookie)WS规范没有指定。这取决于浏览器供应商。
可以向任何站点打开WS连接,而不仅是最初为JS提供连接的站点。但是,浏览器必须将WS开放握手中的“Origin”HTTP头设置为最初为JS服务的那个。然后,服务器可以自由接受或拒绝连接。
你可以在JS中生成一个随机字符串,存储该客户端,并让它加上客户端IP参与计算WS的身份验证令牌。