PUT или PATCH, чтобы изменить только одно значение поля
Я подумываю создать API для пользователей, чтобы изменить их пароль.
Пользовательская таблица имеет несколько полей, таких как имя, фамилия и так далее. Для этого API, я должен использовать PATCH, как показано ниже?
PATCH / users / {userId}
{
"password": "new_password"
}
Или я должен использовать PUT?
PUT / users / {userId} / {пароль}
Это кажется ужасным... для seruciry.
Кстати, я не хочу, чтобы пользователи меняли значения других полей. Я думаю, что PATCH должен позволить пользователям иметь возможность изменять значения любых полей. Вот почему мне интересно.
2 ответа
От безопасности POV нет никакой разницы. Атака может прочитать как строку запроса, так и тело запроса. Вы должны использовать TLS.
Оба запроса выглядят хорошо для меня. Их URL и их тела хорошие, твердые ОТДЫХ.
Если вы не хотите принимать изменения ко всем полям, напишите на своем сервере логику, которая отклоняет запросы на изменение полей, которые пользователь не должен изменять. Но это не вопрос PUT
против PATCH
или же POST
,
Информация о пути и строка запроса будут зашифрованы с использованием HTTPS/TLS - для этого сеанса HTTP. Тем не менее, по-прежнему плохая идея размещать пароли там, так как они могут быть в истории браузера и / или журналах сервера.
PUT /users/{userId}/{password}
... это останется в журналах веб-сервера. Как безопасные разработчики, мы не должны даже хранить пароли в базах данных, где они могут быть украдены (мы должны хранить хэш + соль пароля). Наличие открытых текстовых паролей в журналах веб-сервера хуже.
Лучше всего отправить его в теле в сеансе TLS.
PATCH /users/{userId}
{
"password": "new_password"
}
... а затем хэш + соль это и сохранить это. Логины, вы делаете тот же процесс (совпадение односторонних хэшей).
Смотрите это: HTTPS, URL-адрес и строка запроса