PUT或PATCH仅更改一个字段值

时间:2015-05-20 16:03:56

标签: rest restful-url restful-architecture http-1.1

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

PATCH / users / {userId}

{
  "password": "new_password"
}

或者,我应该使用PUT吗?

PUT / users / {userId} / {password}

对于seruciry而言,这似乎很糟糕。

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

2 个答案:

答案 0 :(得分:1)

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

这两个请求对我来说都很好。他们的URL和他们的身体是好的,坚实的REST。

如果您不想接受对所有字段的更改,请在服务器中写入拒绝用于更改用户不会更改的字段的请求的逻辑。但这不是PUTPATCHPOST的问题。

答案 1 :(得分:1)

路径信息和查询字符串将使用HTTPS / TLS加密 - 用于该HTTP会话。但是,将密码放在那里仍然是一个坏主意,因为它们可能位于浏览器历史记录和/或服务器日志中

PUT /users/{userId}/{password}

...将保留在Web服务器日志中。作为安全的开发人员,我们甚至不应该将密码存储在可以被盗的数据库中(我们要存储密码的哈希值+盐)。在Web服务器日志中使用明文密码会更糟糕。

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

PATCH /users/{userId}
{
  "password": "new_password"
}

...然后哈希+加盐并存储它。登录,你做同样的过程(单向哈希匹配)。

请参阅:HTTPS, URL path, and query string

相关问题