Pull to refresh

Защита от повторной обработки POST запроса

Reading time1 min
Views8K
Навеяно этой темой.

Собственно, речь о том, как я в своих проектах делаю проверку на повторное попадание POST или GET параметров в скрипт. А именно: при генерации формы я добавляю в hidden input определенный уникальный ключ, который записываю в некоторой лог таблице. При отправке запросов в скрипт, он выполняет нужные действия и ставит полученному ключу статус выполненности. Ну и собственно дальше просто — сделать проверку в скрипте, принимающем данные, не использован ли случайно ключ.



После этого можно уже отдавать 302 или 303, кому как нравится. Да хоть ничего не отдавать, сообщая пользователю результаты выполнения скрипты (хотя методологически менее правильно).

Метод работает не только для транзакций, оплат и т.п. — но и для любых операций с базой.

Из минусов — пара дополнительных запросов в базу, но я считаю insert и выбор единичной записи — не очень критичная потеря, в угоду общей безопасности работы скрипта. Кроме того, я использую метод еще и дополнительно для создания логов работы.

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

Спасибо за внимание.
Tags:
Hubs:
+1
Comments22

Articles

Change theme settings