【问题标题】:Securing API calls from cross domain using RESTful service使用 RESTful 服务保护跨域的 API 调用
【发布时间】:2017-06-04 00:37:03
【问题描述】:

我有一个预订网站,我从该网站向用户提供几行代码,并在其中将 API 密钥与代码一起添加到 div 中。用户需要在他们的网站中添加这些代码。然后我使用 ajax 调用从我的网站加载视图。我关心的是:如何使用公共和私有 API 密钥以及使用 codeIgniter 的宁静 Web 服务来确保这些调用的安全?

我提供给用户的代码看起来像

    <link rel="stylesheet" type="text/css" href="http://localhost/bookingpoints_com/apiTesting/styles/first.css" />
    <script src="http://localhost/bookingpoints_com/contents/scripts/jquery.js" ></script>
    <script src="http://localhost/bookingpoints_com/contents/scripts/apiused.js" ></script>
    <script src="http://localhost/bookingpoints_com/apiTesting/scripts/common.js" ></script>         
    <div id="api-data-reserve" name="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNXRlc3QgY29kZTE=" data="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNW1HVnZ3YVhMRVc=" sitekey="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNQ=="></div>

通过这些代码行,我对我的站点进行 ajax 调用并在用户站点上呈现视图。我怎样才能让它像谷歌的客户端和密钥结构一样工作,使用纯 API 架构使用 RESTful 服务进行身份验证?

【问题讨论】:

标签: php ajax rest codeigniter api


【解决方案1】:

Ajax 请求可以通过创建 正确的标题。如果你想有一个基本的检查,看看是否 request 是一个可以使用的 Ajax 请求:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }, 但是你不应该基于你的 这张支票的安全。它将消除对页面的直接访问 如果这是你需要的。

但这还不够,您必须使用服务器端脚本(例如 PHP)来保护您的 Ajax 调用。例如,如果您的 AJAX 将密钥传递给 PHP 文件,请在 PHP 文件中编写代码以确保该密钥是正确的。

【讨论】:

    【解决方案2】:

    Facebook、Google 和其他大公司使用 iframe 提供此类服务。
    以 facebook 为例,它为您提供脚本以输入代码,该代码在运行时将为特定视图创建一个 iframe。

    您也不能进行跨站点 ajax 调用。只有从您的网站加载的 iframe 才能安全地加载页面。

    现在有了密钥,您可以随时在脚本中提供公钥。 iframe href 将指向您的网站$_SERVER['http_referer'],您可以在其中确保 api 密钥已获得授权。除非您不打算发布任何私人机密数据,否则请勿使用私钥。

    【讨论】:

      【解决方案3】:

      不久前我写了一篇关于保护 REST API 的文章,特别是那些被浏览器使用的 API。我建议看看https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

      Auth0,一个身份验证提供者也有很多资源,除了以前使用过它们并且喜欢他们的产品之外,我没有任何隶属关系。

      许多 API 都通过 JWT 保护,这很好,因为它们允许您在没有集中式身份验证服务器的情况下对 API 调用进行身份验证。它们基于公共/私有加密算法,其中两个密钥在数学上相关。密钥是在受信任的环境(例如您的服务器)中生成的,但任何人都可以验证它们来自他们所说的那个人。您可以设计其他身份验证令牌方案。

      根据您的需要,任何客户端都可以访问密钥,因此您可以设计特定的权限模型以确保密钥具有最低权限(即它们不应该具有管理员权限等)

      【讨论】:

        猜你喜欢
        • 2013-02-04
        • 2012-09-10
        • 1970-01-01
        • 2014-06-22
        • 2016-04-10
        • 2013-12-29
        • 2011-08-29
        • 2015-07-08
        • 1970-01-01
        相关资源
        最近更新 更多