Мне было интересно, как разработать безопасную форму сообщения через AJAX.
Например, у меня есть:
Моя HTML-форма.
Мой JavaScript, обрабатывающий submit.
URL-адрес отправки: "post_data.php".
Размещенные данные:
id=8&name=Denis
PHP проверяет, являются ли переменные id и name POSTED и их тип данных. Если это нормально, он продолжает делать некоторые вещи в базе данных.
Мой вопрос: как я могу запретить кому-то создавать свою собственную html-форму за пределами моего веб-сайта или что-то еще и публиковать ложные данные в моем PHP-скрипте?
Представьте, что данные действительно существуют в моей базе данных, это может быть плохо.
Спасибо
Ответ 1 · рейтинг 7 · Tomas Aschan
Один очень распространенный способ сделать это - включить какой-либо токен в поле <hidden> вашей формы и сохранить его в переменной сеанса (или где-то еще) на вашем сервере. Когда сообщение отправлено, вы проверяете, что токен действителен.
Кто-то еще может подделать токен, но он не может (по крайней мере, каким-либо простым способом) заставить вас сохранить тот же токен на вашем сервере, поэтому никакая другая форма, кроме вашей собственной, не будет принята.
Вот, например, как работает встроенная поддержка этого в ASP.NET MVC.
Ответ 2 · рейтинг 1 · cjroth
Метод токенов, пожалуй, самый эффективный. При этом вы никогда не должны предполагать, что данные поступают из вашей собственной формы, даже если у вас есть эти другие меры безопасности. Проверка данных всегда будет важна.