php - 如何以安全的方式存储我客户的 API key ?

标签 php api security oauth key

我正在开发一个 SAAS 服务,允许我的客户连接第三方电子邮件工具(例如 MailChimp)。因此,我要求输入与所需服务相关的 API key ,以允许在他们的帐户上自动执行某些操作。

为此,我在他们的数据库中记录了他们的 key API 并完成了连接。但是从安全的角度来看,如果我的数据库在安全方面(准备好的请求等)采取了所有的倾向,但如果我的数据库被黑客入侵......这些是我客户的所有 API key ,以及他们的电子邮件地址自己的客户可以被检索、使用、转售......因为我连接的工具基本上允许存储联系人、组织和发送电子邮件。

所以我想知道什么是允许我的客户使用他们最喜欢的工具的 API 而不会危及他们自己的帐户和客户数据(电子邮件等)的安全的最佳实践。我知道当前使用数据库中的这些数据启动我的 Web 应用程序会很危险。

我想到了几种解决方案:

  • 加密数据库中的 API key ,但我看不到如何测试它们(解密),因为它不像密码?
  • 将 API key 存储在其他地方托管的不同数据库上,但加密问题仍然存在......不是吗?
  • 使用 OAuth 流:它似乎很方便,但我想通过 API 连接的所有服务都没有提供这个,我什至不确定这是否真的适合我。
  • 我打算在 Amazon 网络服务上托管我的 SAAS,我看到它提出了一项名为“KMS” key 管理存储的服务,但我不知道它是否真的再次适应了我的问题...

  • 如果有人已经回答了这个问题,或者知道如何解决,我想对此有所启发!

    注意:对不起,我的英语不好,我是法国人。

    最佳答案

    您提到的所有解决方案都有些有效,组合最有可能是最佳答案。您的应用程序需要访问这些 API key ,因此黑客不可能完全控制您的应用程序而不控制 API key 。完全控制是关键部分——你可以更难找到他们。

    加密

    您需要使用 AES 之类的方法加密它们,而不是散列它们。因为您需要能够解密它们并在您对第 3 方的请求中使用它们。这将帮助您防止,例如。数据库泄漏 - 如果有人获取您的数据库,他们将不得不破解加密才能获取它们(只要正确实现了加密)。加密/解密 key 当然必须不在数据库中,否则整个事情都没有意义:)

    分离

    不同的数据库也有意义 - 如果有人转储您的主数据库,他们将无法访问 API key 数据库,并且必须更深入地访问应用程序才能访问该数据库(理想情况下将是一个完全独立的数据库服务器,只能从您的应用程序访问) .

    解决方案的架构也很重要 - 您可以将一台服务器伪装成面向互联网的 Web 界面,并通过一些有限(尽可能多)的 API 与不面向互联网的后端服务器通信以降低攻击面.只有后端服务器才能访问 key 数据库并执行对第 3 方的请求。现在,攻击者必须跳过几台服务器才能接近 key 。

    结合上述将确保一个人必须获得完全控制您的应用程序(及其所有部分)获取 key 、加密 key 并绕过您可能设置的任何其他保护。

    关于php - 如何以安全的方式存储我客户的 API key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52016229/

    相关文章:

    bash - 强制 cURL 从环境中获取密码

    php - 从php以特定用户身份执行bat文件

    调用另一个 API 后 JavaScript API 返回未定义状态

    javascript - 如何使用 javascript 通过 oAuth 1.0a 连接到 API? [ Angular .js]

    java - Watson STT Java - 无法解析 MediaType AUDIO_WEBM

    java - 准备好的语句是否在这里防止 SQL 注入(inject)

    php - 如何将内存中的用户提供者注入(inject)到服务中?

    php - 如何在php中检测用户是否已注销?

    php - Codeigniter:语言文件中的变量/配置项

    c++ - 在应用程序中隐藏 MySQL 凭据