Как я могу запретить пользователю-пользователю активировать функции ajax?

У меня есть сайт, который использует вызовы ajax для выполнения ряда функций. У них есть запрос веб-браузера на сценарий - ajax.php. Хотя я использую почтовые данные для передачи данных и ограничить команды, которые может вызвать сценарий ajax, на самом деле ничего не мешает пользователям обманывать вызовы ajax, чтобы попытаться манипулировать сайтом. Есть ли какой-то скрытый способ помешать пользователям подменять вызовы? Есть ли способ гарантировать, что вызов ajax действительно происходит с моего сайта, а не с какого-либо другого скрипта или сайта?

Или мне просто нужно проверить граничные условия в скрипте php и запретить пользователям обманывать вещи, которые им не позволят делать, но разрешить им подделывать, где они будут разрешены.

12 голосов | спросил Daniel Bingham 27 J000000Tuesday10 2010, 16:27:04

5 ответов


12

Я не думаю, что есть какой-либо способ сделать это надежно, поскольку любая информация, которую вы могли бы отправить, может быть подделана, в зависимости от того, насколько умна пользователь.

Если вам просто нужен простой блок людей, которые не звонят не с вашей страницы, вы можете проверить реферер, использовать файл cookie или добавить случайное скрытое поле, отправленное вызывающей страницей, которая истекает через определенное время. Но их легко обмануть, если пользователь действительно определен.

ответил 27 J000000Tuesday10 2010, 16:35:52
6

Короче говоря, нет. Любой запрос, сделанный по URL через GET или POST, может быть сделан любым пользователем любого программного обеспечения. Фактически, запрос AJAX действительно не отличается от загрузки URL-адреса напрямую, за исключением того, что последние возвращают данные в браузере, например, на веб-странице.

Именно поэтому вы всегда должны проверять поданные данные на сервере, независимо от того, выполняете ли вы какую-либо проверку Javascript.

Не ясно, что делает серверный сценарий и что может пойти не так, но если пользователи могут «манипулировать сайтом», вызывая ваш скрипт с плохими данными, тогда вы делаете это неправильно.

Возможно, лучшим решением будет введение некоторой формы аутентификации.

ответил DisgruntledGoat 27 J000000Tuesday10 2010, 19:47:48
2

Итак, вы в основном хотите ограничить ajax.php только ответом на запросы AJAX?

Я не эксперт по php, но кажется, что он может определить, поступает ли данный запрос от AJAX или «обычного» запроса браузера, проверяя значение $_SERVER['HTTP_X_REQUESTED_WITH'].

Источник

ответил theycallmemorty 27 J000000Tuesday10 2010, 16:35:27
1

Как заметил кто-то другой ... ajax calls - это всего лишь получатели $ _GET или $ _POST, поэтому мой подход всегда заключался в том, чтобы просто обрабатывать их, как я бы сделал любую страницу действий, и фильтровать /дезинформировать входные данные. Если у вас есть небольшая вариация того, что вы ожидаете, например, месяц, и вы знаете, что это всегда в формате «Янв, Фев, Мар ...», вы можете установить массив ожидаемых значений и отфильтровать его. Ловушка что-нибудь, что не соответствует, и, возможно, что-то бросать что-то вроде «Bzzt ... спасибо за игру ...»

Я не могу придумать пример, где мой сценарий Ajax должен быть более безопасным, чем представление формы.

НТН

ответил digit1001 18 42010vEurope/Moscow11bEurope/MoscowThu, 18 Nov 2010 21:27:36 +0300 2010, 21:27:36
0

Я думаю, что основным решением вашего решения будет ограничение скорости трафика с определенного отпечатка пальца пользователя , Может быть, хеш IP-адреса, строки User Agent и отправляемых данных.

Кроме того, может оказаться полезным привязка страницы, которая вызывает ajax для возвращаемых данных ajax. Таким образом, на странице, на странице загрузки отправить сессионный ключ, который хорош для сеансов X, для каждого запроса ajax ваш JavaScript должен будет передать этот ключ или ajax вернет сбой. После того, как ваша страница обратится к вызовам ajax X+1, заставит пользователя выполнить какое-либо действие (возможно, captcha? Возможно, даже что-то вроде mousemove или tap событие в зависимости от UA) перед отправкой нового сеансового ключа по проводам (вне диапазона от исходного ajax), затем перезапустите процесс.

Хотя я думаю об этом, возможно, что часть вашей проблемы - это слабая проверка отправленных параметров. Если люди могут просто играть с переданными параметрами и возвращать действительные данные, сделайте это сложнее. Как это сделать, зависит от того, какие значения отправляются клиентом, и какое зло может сделать плохой актер, отправив плохие значения.

ответил artlung 27 J000000Tuesday10 2010, 20:46:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132