Я пытаюсь понять, как по-настоящему защитить общедоступные вызовы 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-атак на ваш сайт, представления ваших данных на других сайтах и т. Д.
2 ответа
Я думаю, вы слишком много задумываетесь о том, что такое AJAX. Когда ваш сайт делает запрос ajax на стороне сервера, он такой же, как и любой другой запрос страницы (даже если некоторые скрипты более интенсивно обрабатывают). Вам необходимо защитить весь сайт, а не только отдельные скрипты. Если на вашем сервере нет защиты от DDoS-атак, его можно атаковать через любую страницу. Посмотрите на такие сервисы, как CloudFare
Как упоминал @Sage, это похоже на обычный HTTP-запрос. Вы можете использовать обычную аутентификацию, поскольку информация HTTP-заголовков / cookie будет передаваться на сервер каждый раз, когда вы делаете вызов ajax. Для наглядности вы можете заглянуть в консоль разработчика в браузере. Это то же самое, что открыть вам корневой URL-адрес веб-сайта. Просто убедитесь, что у вас есть проверки аутентификации для вызовов ajax.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.