用于密码更新的 PUT 与 POST

信息安全 密码 休息 阿贾克斯
2021-09-03 03:43:49

我正在编写一个必须包含更改密码实用程序的用户管理系统。我们不使用前端散列密码(希望我们很快会这样做)。因此,每当编辑用户或更改其密码时,密码都会以明文形式通过 https 传递。在这个用例中使用“PUT”和“POST”请求有什么区别。我通常会使用“PUT”,因为它是替换/编辑,但我知道身份验证的标准是“POST”

1个回答

PUT HTTP动词应该是幂等,智能字意思是发送两次请求不应该有任何进一步的影响。这个想法是“PUT”命令与“GET”相反:使用“PUT”发送的数据内容应该存储在指定的 URL 中,并且在概念上可以使用“GET”从同一个 URL 中获取”。在这方面, PUT 和 GET 模仿FTP的预期行为

另一方面,“POST”是类 API 调用的通用动词:将订单发送到服务器以立即执行。此类 API 调用不是幂等的。“更改密码”调用可能应该被设想为 API 调用,而不是文件传输。因此,您应该使用 POST 而不是 PUT。

有关 PUT 与 POST 的进一步讨论,请参阅此博客文章


安全的角度来看,PUT 和 POST 之间没有真正的区别:一切都通过 SSL,而且主要是客户端和服务器之间的约定问题。只要客户端和服务器相互理解,那么两个请求提供的安全性是相同的。

理论上的区别是,客户端可能会在网络故障的情况下再次发出 PUT 调用,而对于 POST 则不会。通常,您更喜欢 POST 语义,并且只保留 PUT用于批量文件传输,这样重新发送将是一个很好的功能,而不是一个问题。