我正在编写一个应用程序,它使用jQuery和JSONP从第三方服务器获取JSON。我的应用程序背后的主要思想是它是一个只有GUI逻辑的前端,任何人都可以编写第三方服务器来使用前端。
我不知道这会产生什么样的安全问题,但我绝对认为这是一个潜在的问题。我可以采取哪些步骤来确保第三方服务器不会完全崩溃将运行GUI的网站?
答案 0 :(得分:2)
JSONP意味着您执行应该返回Javascript对象的第三方javascript。使用JSONP加载的脚本可以执行本地脚本可以执行的任何操作,因此它是一种XSS攻击向量,有两种方式:如果您请求JSONP数据的第三方是邪恶的,或者是否使用了man-in更改了数据中间攻击。
仅通过安全连接执行JSONP就可以避免第二种类型的攻击(或者如果您自己的页面通过不安全的连接发送,则可以忽略这种攻击,在这种情况下,有更简单的方法来执行man-in-the-中间攻击);第一种类型是JSONP固有的,无法避免。您应该只在信任源时使用JSONP。否则,您可以在自己的服务器上设置AJAX网关并通过它请求JSON数据(这仅在JSONP服务不需要身份验证时才有效),或者使用跨域AJAX请求(在旧版浏览器中不起作用) ,并要求JSONP服务器的某些权限。
答案 1 :(得分:1)
如果第三方不值得信任,那么这里存在很大问题。他们可以发送他们想要的任何JavaScript,而不是发送JSONP代码,可能会破坏您的网站或窃取用户的信息。
JSONP只需在您的网页上包含<script>
标记的远程数据即可。它旨在避免浏览器的安全限制,因此只应与可信赖的来源一起使用。
此问题的客户端唯一解决方案不存在。
编辑:哦,我误解了你的问题。我以为客户端将收到JSON。
JSONP只是一个包含在javascript函数调用中的JSON对象。通常,如果您是从服务器进行操作,您只需要自己请求解包的JSON对象,但即使使用JSONP对象,除非您在其上运行eval()
,否则很难自己受伤。
您使用的是现有的JSON库吗?如果是这样,你应该没事。
你自己解析它吗?如果是这样,请避免eval
,你应该没事。
答案 2 :(得分:0)
好吧,JSON描述了一个对象,而不是可执行函数。 JSONP正在做的是将GET请求的结果作为客户端上的函数呈现并执行它。这表明您考虑的最大安全问题是您的代码对数据的影响。