Я пытаюсь понять, как по-настоящему защитить общедоступные вызовы ajax любого типа.

Скажем, JavaScript на общедоступной странице (так что никакой аутентификации пользователя) содержит AJAX-вызов PHP-скрипта (REST API или просто скрипт, это не имеет значения), который выполняет много тяжелой работы. Таким образом, любой пользователь может просто заглянуть в исходный код, найти вызов AJAX, перестроить и выполнить его, а затем снова выполнить миллион раз в секунду и таким образом выполнить DDoS-атаку на ваш сайт - не так уж и хорошо. Сначала я подумал, что проверка HTTP_REFERER может быть полезной, но, как и любое поле заголовка, этим тоже можно манипулировать (просто используйте запрос curl), поэтому повышение безопасности не будет слишком высоким.

Следующий подход заключался в сочетании использования идентификаторов сеансов, файлов cookie и т. Д. Для создания своего рода ключа доступа для каждого средства просмотра страниц, и когда кто-то превысил лимит, вызов AJAX приводил к ошибке. Пока звучит отлично, но после очистки файлов cookie и т. Д. Все будет сброшено. Так что тоже нет реального решения. Но конечно! Используйте IP! Отличная идея! Пользователи общедоступных сетей, которые используют только один IP-адрес для доступа в Интернет, будут полностью счастливы, если один злоумышленник заблокирует услугу для всех из них, злоупотребляя вызовом ... нет. Так что тоже нет отличного решения.

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

Я тоже думал о ключах API или о чем-то подобном. Но это информация, которую также можно извлечь из исходного кода JavaScript. Итак, как запретить другим серверам использовать вашу службу в качестве прокси-сервера, предоставляя ваши данные своим пользователям? (например, вы реализовали API GMaps на своем веб-сайте (или любом другом API), и кто-то использует ваш скрипт для доступа к API с вашим ключом)

tl; dr

Есть ли какой-либо хороший способ действительно защитить ваши общедоступные вызовы AJAX от злоупотребления ими для DDoS-атак на ваш сайт, представления ваших данных на других сайтах и ​​т. Д.

1
Tek 29 Фев 2016 в 21:30
Вы можете изучить JWT. Веб-токены JSON - это открытый отраслевой стандарт для безопасного представления претензий между двумя сторонами.
 – 
Vatsal
29 Фев 2016 в 22:05

2 ответа

Я думаю, вы слишком много задумываетесь о том, что такое AJAX. Когда ваш сайт делает запрос ajax на стороне сервера, он такой же, как и любой другой запрос страницы (даже если некоторые скрипты более интенсивно обрабатывают). Вам необходимо защитить весь сайт, а не только отдельные скрипты. Если на вашем сервере нет защиты от DDoS-атак, его можно атаковать через любую страницу. Посмотрите на такие сервисы, как CloudFare

2
S.A 29 Фев 2016 в 21:51
Согласовано. Если есть какие-либо конкретные запросы, которые вызывают высокую загрузку ЦП или ресурсов на вашем сервере, защитите их с помощью CAPTCHA или ограничения скорости для каждого IP-адреса (обратите внимание на ограничение скорости, а не блокировку).
 – 
SilverlightFox
1 Мар 2016 в 12:20

Как упоминал @Sage, это похоже на обычный HTTP-запрос. Вы можете использовать обычную аутентификацию, поскольку информация HTTP-заголовков / cookie будет передаваться на сервер каждый раз, когда вы делаете вызов ajax. Для наглядности вы можете заглянуть в консоль разработчика в браузере. Это то же самое, что открыть вам корневой URL-адрес веб-сайта. Просто убедитесь, что у вас есть проверки аутентификации для вызовов ajax.

0
user3508612 29 Фев 2016 в 22:02