这会让我的 API KEY 安全吗?
Will this make my API KEY Secure?
通常人们会有一个 API 可以调用,例如,像这样:
example.com/api/getProducts
为了更安全,您可以像这样添加 API 密钥
example.com/api/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
问题在于,从技术上讲,拥有大量资源的人可以遍历此范围并最终猜出正确的 API 密钥。封IP虽然管用,但现在人们有各种各样的方法来使用不同的IP。
这就是我考虑以下内容的原因:
example.com/api/USERNAME/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
这样,如果用户名猜对了,但是密钥错了,我可以在猜到 5 或 10 次后屏蔽用户,或者至少屏蔽 15 分钟。我相信这将使它更安全。但是,它的缺点是如果其他人知道他们的电子邮件地址,他们可能会阻止他们的帐户。
这种情况下最好的方法是什么?
您假设的 API MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh 键是 32 个字符,大概使用 base 62(小写字母 + 大写字母 + 数字)。所以有 6232 = 2.27 x 1057 个可能的键。
假设某人每秒可以进行 100 万次尝试(例如:您的服务器不会崩溃和死机..),这将需要 720,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,0000000000000000左右)以耗尽搜索 space。
不过,将 API 键保留在 URL 中不一定是个好主意,因为这通常会被记录下来。最好将它放在请求 header 中,例如授权 header 是一个很好的地方。
通常人们会有一个 API 可以调用,例如,像这样:
example.com/api/getProducts
为了更安全,您可以像这样添加 API 密钥
example.com/api/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
问题在于,从技术上讲,拥有大量资源的人可以遍历此范围并最终猜出正确的 API 密钥。封IP虽然管用,但现在人们有各种各样的方法来使用不同的IP。
这就是我考虑以下内容的原因:
example.com/api/USERNAME/MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh/getProducts
这样,如果用户名猜对了,但是密钥错了,我可以在猜到 5 或 10 次后屏蔽用户,或者至少屏蔽 15 分钟。我相信这将使它更安全。但是,它的缺点是如果其他人知道他们的电子邮件地址,他们可能会阻止他们的帐户。
这种情况下最好的方法是什么?
您假设的 API MdjKD8dsjkKHjkhsdlouyhDSsdf32jfh 键是 32 个字符,大概使用 base 62(小写字母 + 大写字母 + 数字)。所以有 6232 = 2.27 x 1057 个可能的键。
假设某人每秒可以进行 100 万次尝试(例如:您的服务器不会崩溃和死机..),这将需要 720,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,0000000000000000左右)以耗尽搜索 space。
不过,将 API 键保留在 URL 中不一定是个好主意,因为这通常会被记录下来。最好将它放在请求 header 中,例如授权 header 是一个很好的地方。