November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Tuesday, July 5th, 2011 10:13 pm

Большинство веб-разработчиков знают Правило Правой Руки для HTTP: если запрос меняет состояние сервера, его надо отправлять методом POST, если не меняет — можно использовать GET.

Веб-форма при отправке на сервер меняла его состояние, поэтому разработчки совершенно справедливо указали method=”POST”.

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

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

Казалось бы… если бы не одна мелочь: в форме передаются данные про кредитные карты. Номер, CVV, срок действия, держатель… Весь набор в одном флаконе. И, естественно, при последующей отправке формы весь этот набор оседает в логах веб-сервера в виде реферера. Хуже того, особо умные пользователи могут сохранить всю эту ссылку в закладках браузера. Чтоб не набивать потом данные лишний раз.

В общем, ситуация типа “да вы здесь все молодцы…” ©.

P.S. Если кто случайно не знает прописных истин: надо либо использовать для показа формы и её обработки один и тот же скрипт (тогда редирект не понадобится), либо, если уж по каким-то причинам скриптов два, хранить параметры в сессии на сервере, а клиенту передавать только её идентификатор, да и тот лучше не в URL’е, а в куке.

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Wednesday, July 6th, 2011 07:24 am (UTC)
Да щаз.
Будучи в Петербурге нашёл билет в .... эээээ, чорт, забыл куда, в какую-то достопримечательность, к нему был приколот нестандартного размера чек, на котором было написано всё, кроме Expire date и CVV. Показал друзьям, они порадовались.
Wednesday, July 6th, 2011 07:32 am (UTC)
Это клиника, и это не норма, а нарушение стандартов.
Я, правда, не в курсе, как за это взъ....ть.
Wednesday, July 6th, 2011 08:23 am (UTC)
Нажаловаться в платёжную систему на банк-эквайрер.
Wednesday, July 6th, 2011 08:39 am (UTC)
А это реально работает?
Wednesday, July 6th, 2011 08:55 am (UTC)
по-разному … помнится пытались визе вынести мозг, когда сити использовал пин для логина в веб-морду … получили отписки …

я, честно говоря, не помню чтобы в банкоматных чеках был полный номер у кого, там вроде есть жесткие требования, с посовскими терминалами кажись такого требования нет, ибо тоже пытались пинать то ли на тему перекрестка, то ли на тему живого еще тогда меркадо, что у них на чеках был полный номер карты — банк-экварер послал, виза тоже отписалась … хотя может и пнули их, ибо сейчас полного номера на чеках перекрестка вроде нет …
Wednesday, July 6th, 2011 03:21 pm (UTC)
Это как раз был не банкоматный, а POS-чек, причём необычного вида, как не на ленте печатают, а на заранее заготовленных карточках.
Wednesday, July 6th, 2011 09:35 am (UTC)
Когда как. Иногда работает.