【问题标题】:How to make a web API private如何将 Web API 设为私有
【发布时间】:2015-04-05 04:11:58
【问题描述】:

我有一个我想限制访问的 API。我可以提供访问密钥并在每个请求中检查它们,但我不确定这到底能走多远。

API 被应用程序使用,但它也被网络应用程序使用,有人可以查看其源代码。如果他们这样做了,他们将拥有密钥并可以轻松地进行 API 调用。

是否有更可靠的方法来保护访问?我不确定这里的标准做法是什么。

编辑:经过考虑,我可以使用两管齐下的方法。 Web 应用程序可以使用 POST 和 CSRF,应用程序可以使用 API 密钥。任何其他想法,或者这是一个普遍接受的解决方案? (注意,这仍然不适用于第三方网络应用。)

【问题讨论】:

    标签: javascript security rest


    【解决方案1】:

    您的 API 永远不会是私有的,因为它被一个网络应用程序使用,我假设该应用程序可供公众使用。如果是这种情况,真的没有动力去保护它,因为任何人和每个人都可以访问 API。

    另一方面,如果此 Web 应用程序仅供注册用户使用,您可以使用令牌系统来检查授权。当用户成功登录时,您会传回一个令牌(通常是 20 到 30 个字符长)。每个 API 请求都需要一个有效的令牌。如果您的应用程序需要更高的安全阈值,可以将令牌设置为在创建 X 小时后自动过期(使用数据库作业)。如果安全性不是大问题,则可以在每次提出请求时自动续订。

    这本质上是一个两层的方法。为用户生成临时令牌以直接连接到您的 API,因此永远不会将永久凭据发送到客户端。预定义密钥提供给在您的 API 之上构建应用程序并拥有自己的后端的第三方开发人员。

    【讨论】:

    • 对,问题是网络应用程序是公开可用的。但是,我的 CSRF 想法基本上遵循相同的原则,而不是要求登录并基于此生成令牌。
    • @LukeSapan CSRF 与 API 的公共或私有程度无关。当 API 向公众开放时,攻击者为什么要在您的网站上模拟另一个匿名用户?
    • 我更多的是试图防止 API 被用于未经授权的应用程序中。通过在不使用 API 密钥时添加 CSRF 要求,它会变得更加困难(尽管我认为在技术上仍然可行)。
    【解决方案2】:

    如果是您的 API,您可以简单地执行此操作。

    1) 将以下代码插入您的 API 文件中

    $authToken = "APItoken"; //variables
    
    
    if( !isset($_REQUEST["authToken"]) || $_REQUEST["authToken"] != $authToken )
     die("Need auth token");
    

    2) 您现在需要像这样 GET/POST/PUT URL: http://www.yoursite.com/api1.php?authToken=APItoken&nextParam=&paramAfterThat=

    如果有帮助,请将其标记为答案

    编辑:

    没关系,读错了。几分钟后更新答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2011-10-23
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多