没有用户帐户的API安全

时间:2017-02-07 06:03:37

标签: api security

上周,有人将我们的消息API自动发送给随机的人发送了10,000封邮件。我们计划为JWT提供安全性,但我们没有强制用户身份验证系统。

我们考虑使用1小时到期的令牌,但这感觉有点多余。在这种情况下使用JWT的最佳方法是什么?

一个简单的公开api示例 - 将应用链接发送到手机号码。通过短信。

1 个答案:

答案 0 :(得分:1)

因此,我的日常工作涉及处理移动领域中处理此类事情的产品。如果我在回答您的问题时添加了一个链接(approov),那么它完全可以正常工作吗?

我有几点建议/意见。

如果可能,首先要做的是避免必须信任客户端上运行的代码的情况。总有可能有人能够破坏它并获得对API的访问权。

您的系统没有用户身份验证,因此尝试使用该功能保护API的选项已经完成。

获得某种程度保护的最简单方法是添加嵌入客户端的API密钥。您可能认为尝试使用此方法的第一种方法是将其与API请求一起发送到标头中。然后在您的服务器中检查API密钥是否存在。问题是,如果有人抓住您的客户端,他们可以检查流量并从其中一个HTTP请求中取出密钥。

您可以使用HTTPS保护与服务器的连接,但如果有客户端,则对于MITM连接仍然相对容易。 Pinning这个连接对此有帮助,但是如果某人有足够的决心,他们就可以破解正在执行固定的二进制文件或javascript。

理想情况下,您希望避免直接发送身份验证信息。您可以通过在客户端中嵌入秘密以及API密钥来实现此目的。您可以使用该密钥对发送给服务器的请求进行签名。您可以使用API​​密钥作为HMAC功能的密钥来计算邮件正文的HMAC。您使用API​​密钥来确定在服务器上验证HMAC时要使用的密钥。这样做的好处是你永远不会通过HTTP发送秘密。尽管如此,仍然可以从客户端窃取密钥。以下是来自security.stackexchange.com的HMACs的相关问题

您可以尝试通过在代码中对其进行模糊处理来隐藏秘密,但根据客户编写的语言,这可能会或多或少有效。

此时您可能不得不停下来考虑访问API的重要性/价值以及您希望在保护API方面花费多少工程量。您还必须考虑有人可能想要投入多少工作来进入您的系统。

如果你非常热衷,还有商业解决方案可以覆盖这个空间的一部分,但这些都需要花钱。我的同事写了api key article,从移动角度更详细地介绍了这些内容,这是我们的小利基。