0

我正在阅读 Web 服务的 API,所有方法都涉及发送 HTTP 请求到

https://example.com/api/APIVER/METHOD?apikey=APIKEY&user=USERNAME&password=PASSWORD

需要明确的是,API 密钥和用户密码都是通过 URL 以纯文本形式发送的。但这是否可以,因为“所有 HTTPS 流量都已加密”,还是因为它们仍然是纯文本或 URL 有所不同?

如果这不安全,那么 API 维护人员需要做的最小更改是多少?

4

3 回答 3

1

是的,HTTPS 使这更安全。

于 2012-04-16T21:01:50.177 回答
1

HTTPS 使这更加安全。

您还应该将敏感参数作为 POST 参数而不是 GET 查询字符串参数(HTTP BODY)发送。通常,查询字符串将由 Web 服务器日志(服务器端)以纯文本形式记录,因此可能无法看到它的系统管理员可以访问它。

于 2012-04-17T14:53:27.767 回答
0

HTTPS 将对每个请求中的 URL 进行编码,所以如果您担心网络嗅探,那么您就可以了。HTTPS 还添加了一个 nonce 值,因此您不会受到回复攻击。

根据基础设施,插入用户设备信任的虚假 SSL 证书并使用该证书通过代理路由请求是可能的。但是,这将需要对客户端计算机的管理员/根访问权限以使此类证书受信任(除非违反通常受信任的 CA),并且一旦需要管理员访问权限,所有赌注无论如何都会关闭。

不过,这仍然不是一个好主意,我担心开发人员忘记为 HTTPS 配置它。您有一个 API 密钥,那么为什么不使用 APIKEY 作为盐来获取密码并对其进行哈希处理。现在对于 API 调用,盐是等效的密码,但这意味着用户名和密码不能用于使用这些凭据登录到其他地方,例如 API 正在运行的网站(假设您让用户登录当然在那里。)

更好的办法是使用根本不通过网络的共享秘密,并将其用作盐。

于 2012-04-16T22:14:07.557 回答