получить побочные эффекты против получить сброс пароля - PullRequest
0 голосов
/ 08 июля 2010

Обычно запрос get не имеет побочных эффектов. Однако многие сайты позволяют вам сбросить пароль или подтвердить подлинность вашего электронного адреса / пользователя, щелкнув ссылку, встроенную в электронное письмо. Поскольку мы не хотим отправлять электронные письма в формате HTML и, следовательно, не можем использовать форму, в которой данные отправляются, мы должны использовать запрос get. Однако считается плохим дизайном иметь запросы с использованием GET с побочными эффектами. Что вы думаете об этом? Есть ли способ решить эту дилемму?

Ответы [ 4 ]

3 голосов
/ 08 июля 2010

Обычно такие ссылки содержат только токен, который идентифицирует пользователя, который хочет сбросить пароль, соответственно. запрос на сброс пароля. Он не входит в систему пользователя.

Затем отображается форма, в которой пользователь может создать новый пароль.

В любом случае, запрос GET должен быть идемпотентным, это не сложный факт, это скорее ориентир. Если это улучшает удобство использования для пользователя, чтобы не придерживаться этого руководства, чем пойти на это (после рассмотрения альтернатив и последствий, конечно). В конце концов, юзабилити имеет значение.

Но если вы хотите сбросить пароль путем генерации случайного пароля и отправить его пользователю, не делайте этого. Отправка незашифрованных паролей в незашифрованном виде очень плохая идея. В этом случае я бы предпочел безопасность перед юзабилити и предоставил пользователю возможность выбрать ее самостоятельно.

Обновление

Btw. очень важным моментом для таких URL-адресов является то, что они обычно доступны только один раз или, по крайней мере, только до тех пор, пока пользователь не завершил процедуру. Поэтому, хотя вы можете что-то изменить с помощью запроса GET, ресурс все равно будет удален.

1 голос
/ 08 июля 2010

Это интересное использование, и я считаю, что это приемлемая практика. Но это не исключение из правил. В основном, как обычно это делается, вы должны инициировать сброс пароля заранее другим способом, обычно, вводя свое имя пользователя или адрес электронной почты в форму POST.

Вы можете рассматривать этот запрос POST как операцию, которая сбрасывает ваш пароль. Но даже если вы начали процесс сброса пароля, система все равно должна подтвердить вашу личность. Обычно это делается путем отправки SMS-сообщения или электронного письма с кодом / маркером безопасности, связанным с этим запросом POST. Весь процесс должен быть завершен, чтобы система могла получить этот код от вас любым возможным способом. Вы можете либо ввести его в другую форму POST (например, если вы получите его по SMS), либо он может быть встроен в ссылку электронной почты.

Так что, хотя, технически говоря, ваш последний запрос GET имеет побочный эффект, он все еще является идемпотентной операцией. Поскольку эта ссылка сама по себе ничего не делает, если вы уже не сделали предыдущий запрос POST, чтобы начать процесс сброса. И любые последующие запросы к этому GET URL не будут иметь никакого эффекта.

Edit:

Думаю, также следует отметить, что размещение ссылки в электронном письме позволяет обойти проблему, связанную с тем, что веб-сканеры случайно запускают ваши неидемпотентные операции. Кроме того, тот факт, что большинство таких ссылок сразу перенаправляют на страницу без побочных эффектов, и тот факт, что сама страница имеет токен одноразового использования, означает, что кнопки возврата и обновления не могут вызывать нежелательных побочных эффектов. либо.

0 голосов
/ 08 июля 2010

GET должен быть идемпотентом - получение одного и того же ресурса должно давать одинаковое значение, и это должно быть безопасно.Безопасность подразумевает, что пользователь не несет ответственности за какой-либо побочный эффект.

Хотя идемпотентность и безопасность обычно подразумевают отсутствие побочных эффектов, я бы посоветовал бы подтвердить получение электронного письма или сброс пароля так, чтобы оба были идемпотентными.и безопасное - подтверждение или запрос на сброс формы более одного раза не изменяет ресурс (при условии, что в ответ на сброс пароля отображается форма, которая отправляется для ввода нового пароля).

Если у пользователя есть почтовый агент, который извлекает и кэширует все URL-адреса в сообщениях, то эффект, который пользователь мог бы непреднамеренно вызвать, состоял бы в том, чтобы подтвердить получение электронного письма (что является безвредным и «истинным»), или случайно получил форму для сброса пароля.Если ссылка сброса на самом деле сбрасывает пароль в GET, а не в форме POST, то это немного более серая проблема с юзабилити, чем с чем-либо еще - если маркер сброса подходит только для данного числа обращений, тоэто не может быть отказ в обслуживании.

0 голосов
/ 08 июля 2010

Да, чтобы перейти на страницу, не имеющую побочных эффектов, которая может POST выполнить сброс.

...