在WordPress插件中存储API凭据

时间:2018-01-31 07:25:58

标签: php wordpress authentication encryption

我正在开发一个WordPress插件,它将为最终用户提供对特定第三方API的访问权。

有两种类型的凭据用于通过API进行身份验证:最终用户(电子邮件和密码)和服务提供商,也就是我(合作伙伴ID和签名密钥)。这些凭证与其他参数(例如时间戳)一起用于计算"合作伙伴签名"最终用于身份验证。

这样,API就知道谁从哪个合作伙伴访问了他们的服务。可悲的是,它不支持任何其他类型的身份验证。

问题是这些密码需要采用其原始格式(无哈希或加密)才能进行合作伙伴签名"计算"。但是,如果我不对它们进行加密或散列,那么人们可以使用我的凭据并制作自己的API或使用我的合作伙伴凭据进行其他各种阴暗的业务。

TL; DR :我需要加密/解密WordPress插件中的密码,以便只有该插件才能访问原始密码。

1 个答案:

答案 0 :(得分:2)

保护取决于您认为对所涉及的努力是否足够。没有完美的解决方案。

要隐藏您的凭据,您的插件可以通过远程服务器(例如您自己的)上的中继脚本(PHP,Java等)发送API请求。中继将添加您的凭据,请求API,并将结果返回到插件。示例relay script that adds API key

如果您将此用于特定类型的API请求,例如通过客户查询潜在客户(您将获得贷记)并且只是想阻止任何其他类型的请求与您的ID(例如,更改您的帐户详细信息),那么这应该是足够的。

<强>缺点/问题:

使用您的服务器。

  • 继电器使用资源微乎其微,但如果有高的话 通过您的插件的请求量可能会对您的 服务器负载。

未经授权使用您的中继脚本:

  • 黑客试图找到API的ID不会寻找网站 使用您的中继网址,他们将“搜索”具有“链接”的网站 包含API提供程序名称。 (良好)
  • 但是,虽然您的凭据现在已隐藏,但如果您的插件使用了 然后,Ajax访问者可以查看页面源并识别其URL 你的接力;然后用它来访问API。

为了防止未经授权使用您的中继,插件可以首先请求/生成令牌(例如某些值和盐的MD5)并将其发送到中继请求中。中继将检查此令牌是否匹配其自己的MD5值和salt。然后,您的插件可以“安全地”使用Ajax(尽管访问者仍然可以从页面源识别中继URL,但他们不知道如何生成有效的令牌)。

不幸的是,网站管理员可以读取插件代码,并且您无法阻止您添加任何保护的工程设计。

你可以更进一步,需要插件注册(你没有保证这个人是真的)和检查推荐人/ IP等(所有都可以被欺骗)。