我正在开发一个 SAAS 服务,允许我的客户连接第三方电子邮件工具(例如 MailChimp)。因此,我要求输入与所需服务相关的 API key ,以允许在他们的帐户上自动执行某些操作。
为此,我在他们的数据库中记录了他们的 key API 并完成了连接。但是从安全的角度来看,如果我的数据库在安全方面(准备好的请求等)采取了所有的倾向,但如果我的数据库被黑客入侵......这些是我客户的所有 API key ,以及他们的电子邮件地址自己的客户可以被检索、使用、转售......因为我连接的工具基本上允许存储联系人、组织和发送电子邮件。
所以我想知道什么是允许我的客户使用他们最喜欢的工具的 API 而不会危及他们自己的帐户和客户数据(电子邮件等)的安全的最佳实践。我知道当前使用数据库中的这些数据启动我的 Web 应用程序会很危险。
我想到了几种解决方案:
如果有人已经回答了这个问题,或者知道如何解决,我想对此有所启发!
注意:对不起,我的英语不好,我是法国人。
最佳答案
您提到的所有解决方案都有些有效,组合最有可能是最佳答案。您的应用程序需要访问这些 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/