【问题标题】:Security Issues with JSONP in jQueryjQuery 中 JSONP 的安全问题
【发布时间】:2011-09-13 04:14:03
【问题描述】:

我现在正在编写一个应用程序,它使用 jQuery 和 JSONP 从 3rd 方服务器获取 JSON。我的应用程序背后的主要思想是它是一个只有 GUI 逻辑的前端,任何人都可以编写第 3 方服务器来使用前端。
我不知道这会引起什么安全问题,但我绝对认为这是一个潜在问题。我可以采取哪些步骤来确保第 3 方服务器不会使我的运行 GUI 的站点完全崩溃?

【问题讨论】:

    标签: javascript security jsonp


    【解决方案1】:

    JSONP 意味着您执行第三方 javascript,它应该返回一个 Javascript 对象。你用 JSONP 加载的脚本可以做任何本地脚本可以做的事情,因此它是一个 XSS 攻击向量,有两种方式:如果你请求 JSONP 数据的第三方是邪恶的,或者数据被人为更改-中间攻击。

    第二种类型的攻击可以通过仅在安全连接上执行 JSONP 来避免(或者如果您自己的页面通过不安全的连接发送,则可以忽略,在这种情况下,有更简单的方法来执行 man-in-the-中间攻击);第一种类型是 JSONP 固有的,无法避免。仅当您信任源时才应使用 JSONP。否则,您可以在自己的服务器上设置 AJAX 网关并通过它请求 JSON 数据(这仅在 JSONP 服务不需要身份验证时才有效),或使用跨域 AJAX 请求(在旧浏览器中不起作用,并且需要来自 JSONP 服务器的某些权限)。

    【讨论】:

      【解决方案2】:

      如果第三方不值得信赖,那么你的问题就大了。他们可以发送他们想要的任何 JavaScript,而不是发送 JSONP 代码,这可能会损坏您的网站或窃取用户信息。

      JSONP 的工作原理是在您的页面上包含带有<script> 标签的远程数据。它旨在避免浏览器的安全限制,因此只能与可信赖的来源一起使用。

      不存在解决此问题的唯一客户端解决方案。

      编辑:哦,我误读了你的问题。我以为客户端会收到 JSON。

      JSONP 只是一个封装在 javascript 函数调用中的 JSON 对象。通常,如果您在服务器上进行操作,您只需请求解包的 JSON 对象本身,但即使使用 JSONP 对象,也很难伤害自己,除非您在其上运行 eval()

      您是否使用现有的 JSON 库?如果是这样,你应该没问题。

      你自己解析吗?如果是这样,请避免使用eval,您应该会没事的。

      【讨论】:

        【解决方案3】:

        嗯,JSON 描述的是一个对象,而不是一个可执行函数。 JSONP 所做的是将 GET 请求的结果呈现为客户端上的函数并执行它。这表明您要考虑的最大安全问题是您的代码对数据的处理方式。

        【讨论】:

        • 好吧,我的代码正在获取数据(希望以特定格式提供)并将其显示给用户。当用户交互时,我将数据发送回第 3 方服务器。我最担心的是,有人可能会导致执行一些 Javascript,这将使他们能够访问与我网站的用户有关的功能,或者只是执行一些可能导致我的网站以某种方式超载的 Javascript(尽管我知道这不是就像 JS 一样令人担忧的是客户端)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 2010-09-12
        • 2014-08-19
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 2016-12-10
        相关资源
        最近更新 更多