我正在开发一个WordPress插件,它将为最终用户提供对特定第三方API的访问权。
有两种类型的凭据用于通过API进行身份验证:最终用户(电子邮件和密码)和服务提供商,也就是我(合作伙伴ID和签名密钥)。这些凭证与其他参数(例如时间戳)一起用于计算"合作伙伴签名"最终用于身份验证。
这样,API就知道谁从哪个合作伙伴访问了他们的服务。可悲的是,它不支持任何其他类型的身份验证。
问题是这些密码需要采用其原始格式(无哈希或加密)才能进行合作伙伴签名"计算"。但是,如果我不对它们进行加密或散列,那么人们可以使用我的凭据并制作自己的API或使用我的合作伙伴凭据进行其他各种阴暗的业务。
TL; DR :我需要加密/解密WordPress插件中的密码,以便只有该插件才能访问原始密码。
答案 0 :(得分:2)
保护取决于您认为对所涉及的努力是否足够。没有完美的解决方案。
要隐藏您的凭据,您的插件可以通过远程服务器(例如您自己的)上的中继脚本(PHP,Java等)发送API请求。中继将添加您的凭据,请求API,并将结果返回到插件。示例relay script that adds API key。
如果您将此用于特定类型的API请求,例如通过客户查询潜在客户(您将获得贷记)并且只是想阻止任何其他类型的请求与您的ID(例如,更改您的帐户详细信息),那么这应该是足够的。
<强>缺点/问题:强>
使用您的服务器。
未经授权使用您的中继脚本:
为了防止未经授权使用您的中继,插件可以首先请求/生成令牌(例如某些值和盐的MD5)并将其发送到中继请求中。中继将检查此令牌是否匹配其自己的MD5值和salt。然后,您的插件可以“安全地”使用Ajax(尽管访问者仍然可以从页面源识别中继URL,但他们不知道如何生成有效的令牌)。
不幸的是,网站管理员可以读取插件代码,并且您无法阻止您添加任何保护的工程设计。
你可以更进一步,需要插件注册(你没有保证这个人是真的)和检查推荐人/ IP等(所有都可以被欺骗)。