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