Comments 22
Поместил в WEB-разработку, полагаю наиболее подходит.
Мне кажется в некоторых случая достаточно будет md5-хеша не изменяемых данных транзакции (например, без учета id и даты времени).
В чем прикол? Чем не подошел обычный редирект без этого бубна?
Вот вот.
После обработки формы сделать редирект на другую страницу можно ведь.
После обработки формы сделать редирект на другую страницу можно ведь.
Защита от невыполнения редиректа. Не разу разьве не видели, когда отправляешь форму, браузер зависает в режиме «скачано 0/0». Данные POST уже отправлены, а результаты выполнения скрипта, и Ваш редирект планируемый браузер не взял. Случается такое с не очень качественным интернетом, тем же gprs. Не дождавшись результата — пользователь может обновить страницу, остановить и иобновить — и данные передадутся вновь, и никакой редирект не спасет.
Ну конечно, в говнокодинге это лишнее, используйте редирект.
Ну конечно, в говнокодинге это лишнее, используйте редирект.
То что Вы предлагаете реализовать на самом деле является классической защитой от CSRF.
Не только от CSRF.
Я так отшиваю тупых спамботов, которые пытаются кидать свои запросы минуя страницу с формой.
В моём случае это 98% всего спама, так что метод оказывается очень эффективен.
Я так отшиваю тупых спамботов, которые пытаются кидать свои запросы минуя страницу с формой.
В моём случае это 98% всего спама, так что метод оказывается очень эффективен.
А это тоже CSRF — сейчас этот термин несколько расширен и, конечно, правильнее было бы просто RF. Метод не просто эффективный, а вообще непробиваемый, как показала моя практика.
А почему нельзя ключ хранить в $_SESSION?
Не понимаю зачем такие сложности с «уникальным ключом» и всё такое… Всё проще! При переходе на страницу формы делаем:
//не забудьте проинициализировать сессию
$_SESSION[«formId12345InputAllowed»] = true;
При отправки в форму вот такой:
//не забудьте проинициализировать сессию
if($_SESSION[«formId12345InputAllowed»] == true)
{
unset($_SESSION[«formId12345InputAllowed»] );
// дальше то что вам нужно с формой этой делать
}
else
{
echo «error!»;
die();
}
Что нужно больше?? И никаких вам запросов в базу
//не забудьте проинициализировать сессию
$_SESSION[«formId12345InputAllowed»] = true;
При отправки в форму вот такой:
//не забудьте проинициализировать сессию
if($_SESSION[«formId12345InputAllowed»] == true)
{
unset($_SESSION[«formId12345InputAllowed»] );
// дальше то что вам нужно с формой этой делать
}
else
{
echo «error!»;
die();
}
Что нужно больше?? И никаких вам запросов в базу
12345 — уникальный идентификатор каждой формы (типа 123 — для авторизации, 124 — для транзакциии тд), дабы позволить пользователям вбивать сразу в несколько форм одновременно…
Что нужно больше? Как Ваш метод защищает от долблений в форму ботов, которые не передают и не принимают печеньки?
Sign up to leave a comment.
Защита от повторной обработки POST запроса