Rest 放置或修补以仅更改一个字段值

Rest 放置或修补以仅更改一个字段值,rest,restful-url,http-1.1,Rest,Restful Url,Http 1.1,我正在考虑为用户创建一个API来更改密码。 用户表有一些字段,如firstname、lastname等。 对于这个API,我应该使用如下的补丁吗 补丁/users/{userId} { "password": "new_password" } 或者,我应该使用PUT吗? PUT/users/{userId}/{password} 这对安全来说似乎很糟糕 顺便说一下,我不希望用户更改其他字段的值。我认为补丁必须让用户能够更改任何字段的值。这就是我想知道的原因。从安全角度看,没有区别。攻击可以

我正在考虑为用户创建一个API来更改密码。
用户表有一些字段,如firstname、lastname等。 对于这个API,我应该使用如下的补丁吗

补丁/users/{userId}

{
  "password": "new_password"
}
或者,我应该使用PUT吗?

PUT/users/{userId}/{password}

这对安全来说似乎很糟糕


顺便说一下,我不希望用户更改其他字段的值。我认为补丁必须让用户能够更改任何字段的值。这就是我想知道的原因。

从安全角度看,没有区别。攻击可以读取查询字符串和请求正文。你应该使用TLS

我觉得这两个要求都不错。他们的网址和身体都很好,很结实


如果不希望接受对所有字段的更改,请在服务器中编写逻辑,拒绝尝试更改用户不更改的字段的请求。但这不是
PUT
PATCH
POST
的问题,路径信息和查询字符串将使用HTTPS/TLS加密-用于该HTTP会话。但是,将密码放在那里仍然是一个坏主意,因为它们可能存在于浏览器历史记录和/或服务器日志中

PUT /users/{userId}/{password}
。。。这将保留在web服务器日志中。作为安全的开发人员,我们甚至不应该将密码存储在可能被盗的数据库中(我们要存储一个哈希+盐密码)。在web服务器日志中使用明文密码更糟糕

在TLS会话中将其发送到正文中是最好的

PATCH /users/{userId}
{
  "password": "new_password"
}
。。。然后把它炸开,加盐,然后储存起来。登录时,执行相同的过程(单向哈希匹配)

见此: