【问题标题】:Security for AJAX requests from the client side accessing an API来自客户端访问 API 的 AJAX 请求的安全性
【发布时间】:2011-11-29 06:16:09
【问题描述】:

假设您希望第三方网站复制并粘贴您提供的 javascript 代码的 sn-p。此代码使用 AJAX 请求访问服务器上的 JSON API。您将如何实现安全性,以便在将 API 使用与已注册并收到 API 密钥的网站相关联时,您将有效地禁止网站滥用另一个网站的 API 密钥/使用?这种安全性从客户端是不可能的吗?站点是否必须从服务器访问 API?

【问题讨论】:

    标签: javascript ajax json security api


    【解决方案1】:

    您可以只检查window.location 或其某些组件。

    【讨论】:

    • 所以你是说将 AJAX 请求中window.location 的结果传递给我的服务器?
    • 好吧,由于跨域限制,您无论如何都不能使用真正的 AJAX。因此,网站通常会提供一个封装 API(例如 google.com/jsapi?key=INSERT-YOUR-KEY),它会执行 JSONP 调用。该脚本还可以查看window.location。然后,问题是网站是否尝试直接进行 JSONP 调用。
    • 是的,没有什么可以阻止站点更改脚本,或者根据它如何看待其他进行 JSONP 调用的站点发送虚假信息...
    • 关于如何限制网站直接进行 JSONP 调用的任何想法?
    • @Justin,您可以在对 JSONP 调用的响应中执行 window.location 检查。例如,使用 Google API 示例,在每次搜索调用时,使用脚本 if(isValidDomain()){callback();} 进行响应,但这会影响性能。
    【解决方案2】:

    我能想到的实施这种安全性的唯一方法是使用 IP 地址,但这充其量是有风险的,因为它是一个糟糕的设计有很多原因。

    这将是服务器端保护 javascript 文件的安全措施。您可以让 Web 服务提供 javascript,这样它就可以在将文件发送到客户端之前进行检查。

    【讨论】:

    • 什么IP地址?您无法对客户端 IP 进行硬编码,因为您和第三方网站都不知道未来用户的 IP。
    • @MatthewFlaschen - 您需要知道的事实将是困难的部分,以及为什么我认为它可能不是一个完美的解决方案,但这可能是最安全的方法。你在 javascript 中所做的任何事情都可能被黑客入侵。
    • @MatthewFlaschen - 获取 API 密钥的一部分可能是说明可以使用哪些 IP 地址,因此可以获得此信息。这不会阻止某人在浏览器中复制 javascript 文件并将其放在另一个网站上。我认为这种方法存在缺陷,因为 javascript 天生就不容易保护。
    【解决方案3】:

    您还可以在您的服务器站点上检查请求的 HTTP 引荐来源网址。
    我不认为更改 javascript 代码可以伪造它。
    但它不能阻止某人从自定义浏览器或某些 http 客户端发送自定义包。

    实施服务器端解决方案是可能的,而且不会太难,但它会阻止许多网站使用您的脚本。
    您可以让他们从他们的服务器发送请求
    或者让他们将密钥保存在他们的服务器上,在将密钥发送到客户端之前对密钥进行哈希处理(哈希密钥在一段时间后更改)...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2017-02-10
      • 2015-03-05
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多