security - 如何保护 HTTP GET 请求中的 api key

标签 security ssl hash md5

我是密码学的新手,我正试图在我正在开发的网络服务中防止中间人攻击。 Web 服务的工作方式是用户使用他的电子邮件地址和密码在服务上注册并创建应用程序。每个应用程序都有一个应用程序 ID 和一个应用程序 key 。应用程序 ID 是公开的(这是公众与该应用程序通信的方式),但应用程序 key 是私有(private)的。用户通过加载一个 pin(一个 16 位数字字符串)来记入他的应用程序。加载 pin 是通过 HTTP Get 请求完成的。

现在我的问题是:用户如何使用他的应用程序 ID(服务器识别应用程序的方式)和他的应用程序 key (服务器验证他的方式)执行 HTTP GET 请求而不泄露他的应用程序 key ?

因为我们的服务器有 SSL(而且我读到 SSL 可以防止中间人攻击),我正在考虑简单地让用户提交他们的应用程序 ID 和应用程序 key 作为 GET 请求中的参数,但是在阅读周围,我认为这可能不安全。这也是因为在执行 HTTP GET 请求以加载 pin 后,用户可以配置他的帐户,我们通过另一个 HTTP GET 请求向他选择的 URL 提交服务器响应。由于我们想回显他的应用程序 ID 和应用程序 key ,以便他可以验证请求确实来 self 们,我担心他的 key 可能会被泄露。

所以我决定我们应该让用户对他的应用程序 ID 和应用程序 key 进行 md5 哈希,以提供一个哈希参数,并在 GET 请求中提交该参数而不是他的应用程序 key 。然后在我们的服务器上,因为我们已经知道用户的应用程序 ID 和应用程序 key ,我们可以简单地对两者进行 md5 哈希并将其与用户提交的哈希参数进行比较。但后来我也认为这可能是不安全的,因为如果有人截获哈希参数,攻击者可以使用相同的哈希参数提交多个请求,因为应用程序 ID 和应用程序 key 是静态的。所以从长远来看,hash参数和app key没有区别。

现在我在想,我们应该让用户对他的应用程序 ID、他的应用程序 key 和他想要加载的 pin 进行 md5 哈希,以获得哈希参数。这样,由于每次 PIN 总是不同的,即使攻击者拦截了一个请求,身份验证过程也不会因其他请求而受到损害,因为攻击者将无法在其他请求中重用该哈希值。

例如,如果用户具有以下凭据: 1. app_id: 1234 2. 应用 key :bghuTHY678KIjs78

用户想要加载密码:1234567890123456

他通过对“1234:bghuTHY678KIjs78:1234567890123456”进行 md5 哈希来生成哈希。这给了他 210a4c92d85473af9d5f48b4ee182ddd。然后他向以下地址发出 HTTP Get 请求:

https://example.com/process?app_id=1234&pin=123456789012&hash=210a4c92d85473af9d5f48b4ee182ddd

这种方法安全吗?或者我应该只是让用户在 HTTP GET 请求中提交他们的应用程序 ID 和应用程序 key ,因为我们有 SSL?

最佳答案

用户 secret 不应该通过网络发送。相反,要求用户使用他的 secret 签署他的请求。 HMAC 是相关算法。

顺便说一下,对于所有加密需求,MD5 已经过时且不安全。

关于security - 如何保护 HTTP GET 请求中的 api key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587377/

相关文章:

java - 在 DispatcherServlet 中找不到具有 URI j_spring_security_check 的 HTTP 请求的映射

email - 后缀电子邮件 TLS header 但未针对 gmail 加密

c++ - md5sum 包含总和本身的文件?

ruby-on-rails - Public_activity gem 参数 Rails 3

android - 我应该如何编码来抵抗 "one-click piracy"?

ruby-on-rails - 在我的 Ruby on Rails 网站上线之前我应该​​检查什么?

java - 使用 BouncyCaSTLe 创建 key 对证书并使用外部 CA 对其进行签名

ruby-on-rails - 如何从 Rack 应用程序访问 SSL 客户端证书

php - Validation SSL 是否与 soap 直接相关?

ruby-on-rails - 将 json 响应与哈希数组进行比较