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