上周,有人将我们的消息API自动发送给随机的人发送了10,000封邮件。我们计划为JWT提供安全性,但我们没有强制用户身份验证系统。
我们考虑使用1小时到期的令牌,但这感觉有点多余。在这种情况下使用JWT的最佳方法是什么?
一个简单的公开api示例 - 将应用链接发送到手机号码。通过短信。
答案 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,从移动角度更详细地介绍了这些内容,这是我们的小利基。