通常人们会使用可以使用的API来调用,例如:
example.com/api/getProducts
为了使其更安全,您可以添加像这样的API密钥
example.com/api/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
问题在于,从技术上讲,拥有大量资源的人可以迭代这个范围并最终猜出正确的API密钥。尽管阻止IP可以起作用,但现在人们有各种各样的方法来使用不同的IP。
这就是我考虑以下内容的原因:
example.com/api/USERNAME/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
这样,如果用户名被正确猜出,但是密钥错误,我可以在5或10次猜测后阻止用户,或者至少阻止他们15分钟。我相信这会使它变得更加安全。然而,如果他们知道他们的电子邮件地址,那么其他人可能会阻止他人的帐户。
在这种情况下,最好的方法是什么?
答案 0 :(得分:2)
您对MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh的假设API密钥为32个字符,大概使用基数62(小写+大写字母+数字)。所以有62个 32 = 2.27 x 10 57 可能的密钥。
假设某人每秒可以进行100万次尝试(例如:你的服务器没有消耗并且死亡......),那将花费72万亿亿亿亿个世纪(尽管我的快速转换可能会被百万年左右的时间关闭)耗尽搜索空间。
将API密钥保留在URL中并不一定是个好主意,因为这通常会被记录。最好将它放在请求标头中,例如Authorization标头是一个很好的位置。