На моем веб-сайте у меня есть страница регистрации, в которой запрос AJAX проверяет, доступно ли имя пользователя после его ввода. Этот файл называется check.php и находится в том же каталоге, что и файл registration.php. Когда данные отправляются на check.php, он будет выполнять запрос в базе данных MySQL и возвращать количество пользователей, найденных с этим именем пользователя.
Если кто-то должен был отправить данные в файл check.php, они тоже увидели бы результат. Мне нужно как-то это прекратить, я прочитал несколько ответов, которые мне нужны для «проверки подлинности» каждого запроса. Это, вероятно, очень большая тема, хотя я не слишком уверен, что искать, чтобы найти больше об этом. Является ли аутентификация каждого запроса хорошим способом остановить ненужные проверки имени пользователя? Если так, я был бы очень признателен, если бы кто-нибудь мог указать мне в правильном направлении, как это сделать.
Ответ на обычный случай: нет – вы не можете этого предотвратить, поскольку AJAX – это просто HTTP-запрос. Он может быть отправлен независимо от того, как вы будете защищать свой сервер. Поэтому, если дело в том, чтобы защитить от «злобных хакеров» – нет никакого способа сделать это. Правильно, однако, это проверить / проверить что-либо на стороне сервера.
Но речь идет только о базовой проверке, вы можете прочитать
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest')
– но имейте в виду – это также данные, которые поступают от клиента, т. е. нельзя доверять (на самом деле это просто заголовок HTTP-запроса, не более того)
Решением является создание уникального токена в сеансе и размещение его на всех страницах, которые будут содержать форму. Поместите этот токен на каждый сделанный вами запрос AJAX. Он называется защитой CSRF, подделкой запросов на межсайтовый запрос .
Вы можете добавить защитный слой, проверяющий референт пользователя в заголовках HTTP.
Я думаю, вы можете создать переменную сеанса, когда пользователь войдет в вашу заявку и проверит, имеет ли эта переменная правильное значение, и вы отправляете что-то в свой файл «check.php», чтобы проверить, является ли ваш пользователь предыдущей аутентификацией
Отсутствует много информации, но концептуально я не уверен, что вы беспокоитесь о реальном риске. Суть в том, что люди могут использовать вашу форму, чтобы проверить, существуют ли электронные письма, поэтому логично, что они также могут использовать check.php. Было бы излишним попытаться предотвратить это.
Я думаю, вы можете создать уникальный токен, сохранить его на СЕССИИ, прежде чем показывать страницу. Затем при каждой проверке вы должны добавить этот токен для запроса. check.php должен регенерировать токен и возвращать его.
Но каждый запрос может эмулировать и не защищать вас от людей, которые хотят знать результаты check.php. Ничто не защищает …
Также вы можете создать механизм для анализа запроса ip для проверки