У меня есть сайт, который использует вызовы ajax для выполнения ряда функций. У них есть веб-браузер обратного вызова сценария - ajax.php. Хотя я использую данные постов для передачи данных и ограничения команд, которые может вызывать сценарий ajax, на самом деле ничто не мешает пользователям подделывать вызовы ajax для попыток манипулировать сайтом. Есть ли какой-то общий способ предотвратить подделку звонков пользователями? Есть ли способ убедиться, что вызов ajax действительно приходит с моего сайта, а не с какого-либо другого скрипта или сайта?
Или мне просто нужно проверить граничные условия в php-скрипте и запретить пользователям подделывать то, что им не разрешено делать, но разрешить им подделывать там, где им будет позволено.
Ответы:
Я не думаю, что есть какой-то способ сделать это надежно, поскольку любая информация, которую вы можете отправить, может быть подделана, в зависимости от того, насколько умный пользователь.
Если вы просто хотите, чтобы простые люди звонили не со своей страницы, вы можете проверить реферала, использовать cookie-файл или добавить случайное скрытое поле, отправленное вызывающей страницей, срок действия которого истекает через определенное время. Но их легко подделать, если пользователь действительно настроен.
источник
Короче нет. Любой запрос на URL через GET или POST может быть сделан любым пользователем, использующим любое программное обеспечение. На самом деле, AJAX-запрос на самом деле ничем не отличается от загрузки URL-адреса напрямую, за исключением того, что с последним возвращенные данные отображаются в браузере как веб-страница.
Именно поэтому вы всегда должны проверять отправленные данные на сервере, независимо от того, выполняете ли вы какую-либо проверку Javascript.
Не совсем понятно, что делает серверный сценарий и что может пойти не так, но если пользователи могут «манипулировать сайтом», вызывая ваш сценарий с неверными данными, значит, вы делаете это неправильно.
Вероятно, лучшим решением будет ввести некоторую форму аутентификации.
источник
Итак, вы хотите ограничить ajax.php только ответом на запросы AJAX?
Я не эксперт по php, но, похоже, можно определить, поступает ли данный запрос от AJAX или «обычного» запроса браузера, проверив значение
$_SERVER['HTTP_X_REQUESTED_WITH']
.Источник
источник
Как заметил кто-то еще ... ajax-вызовы - это просто получатели $ _GET или $ _POST, поэтому мой подход всегда заключался в том, чтобы просто обрабатывать их так же, как и любую страницу действий, и фильтровать / очищать входные данные. Если у вас есть небольшое отклонение от ожидаемого, например, месяца, и вы знаете, что оно всегда в формате «январь, февраль, март ...», вы можете установить массив ожидаемых значений и отфильтровать его. Поймайте все, что не соответствует, и при желании выведите что-то вроде «Bzzt ... спасибо за игру ...»
Я не могу вспомнить пример, когда мой Ajax-скрипт должен был бы быть более безопасным, чем отправка формы.
НТН
источник
Я думаю, что основной частью вашего решения будет ограничение скорости трафика от отпечатка конкретного пользователя. Может быть, хэш IP-адреса, строки агента пользователя и отправляемых данных.
Также может помочь привязка страницы, которая вызывает ajax, к возвращаемым данным ajax. Поэтому на рассматриваемой странице при загрузке страницы отправьте ключ сеанса, который подходит для
X
сеансов, для каждого запроса ajax ваш JavaScript должен будет передать этот ключ обратно, иначе ajax вернет ошибку. Как только ваша страница попадет наX+1
вызовы ajax, вынудите пользователя выполнить какое-либо действие (возможно, капчу? Может быть, даже что-то вроде событияmousemove
или вtap
зависимости от UA) перед отправкой нового ключа сеанса по проводам (вне диапазона от исходного ajax), а затем перезапустите процесс.Хотя, как я думаю, возможно, что частью вашей проблемы является слабая проверка отправленных параметров. Если люди могут просто поиграть с отправленными параметрами и получить действительные данные, сделать это будет сложнее. Как это сделать, зависит от того, какие значения отправляет клиент, и какие неприятности может причинить плохой субъект, отправляя неверные значения.
источник