【问题标题】:Securing private API key保护私有 API 密钥
【发布时间】:2016-03-04 11:39:15
【问题描述】:

所以我一直在搜索整个私有 API 密钥的安全性,但我对我应该采取的方法有点困惑,因为我还没有找到与我有相同特定问题/方法的人.

我正在开发一个通过第三方 API 运行的 Android 应用,我通过请求私钥获得了访问权限。现在,2分:

  • 我的应用程序不直接请求我正在使用的 API,而是请求一组 PHP 文件(托管在应用程序网站上)我编码以简化请求并从我的 API 检索数据使用,如果你允许的话,让我们称之为“某种 API”。因此,从应用程序仅发送指定我的 API 应该向原始 API 请求什么类型的请求,因此,请求不需要原始 API 私钥,因为我可以将其存储在其中一个php 文件并在需要时使用。
  • 我的应用不需要用户注册他们的帐户,因此我没有任何用户 ID 或名称可用于请求。

因此,从这里您可以看到,我并没有尝试在应用代码中隐藏 API 密钥,也没有尝试使用用户 ID 和签名来允许访问我的 API 类型并连续访问原始 API ..

问题是,尽管在浏览器中看不到 php 代码,但以其他方式也不是不可能的,所以我将密钥存储在那里也不安全。所以我的问题很简单,这仍然是我用来隐藏我的私有 API 密钥的最佳方法,还是我应该重新考虑我执行所有这些过程的方式?

【问题讨论】:

    标签: php android api security key


    【解决方案1】:

    如果我对您的理解正确,您不希望将 API 密钥存储在您的公共网络文件夹中,因为它可能会在某些条件下公开访问。

    我遵循的建议是将 API 密钥存储在根 Web 文件夹之外的文件中。然后,您需要/将该文件包含在公用文件夹的脚本中。

    在 Linux 环境中,类似这样:

    /var/www/your_script.php (public access)
    /var/secure/api_key.php (private, web server doesn't access this directory)
    

    在 your_script.php 中

    require_once 'api_key.php'; // example only, you will need to use the correct path
    echo $api_key; // testing, you can use the key in the script
    

    在 api_key.php 中

    $api_key = '15r723er8q5re';
    

    【讨论】:

    • 其实很简单,正是我想要的,谢谢!
    【解决方案2】:

    您的应用应该连接到您的服务器,然后您的服务器会代表您的用户将信息发送到需要 api 密钥的 API 服务器。 api 密钥的唯一传输时间是您的 SERVER 与 API SERVER 通信时。

    【讨论】:

    • 这就是我所做的。对不起,如果我的问题不够清楚,请编辑它。
    • 我看不到你的应用程序会在哪里显示你的 api 代码,如果它只将它发送到 api 服务器。
    • 我并不担心应用程序会泄露 api 代码,而是担心有人进行 MITM 攻击,然后(已经知道我的请求 url)使用某种方法通过 api 读取 php 文件键。