Код кишками наружу в консоли разработчика | JS
При изучении JS заметил, что код JS полностью доступен в консоли разработчика. Все переменные и функции можно вывести и даже выполнить. Отсюда следует несколько вопросов:
- Можно ли как-то спрятать переменные от посторонних глаз в консоли?
- Погуглив тему нашел вполне логичное решение: спрятать всю важную логику на серверную сторону. Отсюда вопрос: Например у нас есть форма регистрации, которая при нажатии на кнопку выполняет запрос на серверную часть, отправляя введенные данные, которые обрабатываются уже на сервере. Но что мешает злоумышленнику, например, в консоли выполнить вручную функцию, отвечающую за отправку запроса, тем самым забив нашу БД новыми пользователями? Или сделать что-то подобное, навредив проекту? Можно ли избежать этого?
Спасибо
Ответы (1 шт):
Та схема, которая посылает на сервер данные и получает результаты, а потом отображает их пользователю в браузере, применяется сейчас очень широко. В общих терминах - это подход Single Page Application, работающих через REST.
Конечно, SPA всё не ограничивается, и в любых WEB приложениях, в том числе, активно использующих server-side построение страниц, могут встречаться вызовы API из JavaScript.
Вы совершенно правы, что при определенных усилиях такие запросы к API могут отправлять не страницы сайта, а специально для этого написанные программы, эмулирующие работу браузера.
Есть несколько подходов, которые затрудняют такую эксплуатацию API, но какого то одного подхода, который бы полностью исключал эту возможность, я не знаю.
Использование CDN типа cloudflare. Это - защита от атак "грубой силы", то есть от того, что называется DDOS. Логика там такая: весь трафик к Вашему сайту идёт на сайт не напрямую, а через cloudflare, или подобные ему сервис. При резком повышении нагрузки и появлении в потоке запросов большого колочества однотипных запросов срабатывают алгоритмы фильтрации, котрые отсекают "мусорный трафик" и не дают злоумышленнику "уронить" сайт. Подчеркну - эти алгоритмы работают на стороне CDN.
То, что называется rate limiter. Это - уже штука, которая работает на Вашем сайте и ограничивае частоту вызова мтодов API по Вашим правилам. Настраивается достаточно гибко.
Единстенный способ ПОЛНОСТЬЮ избавиться от возможности эксплуатации API посторонними - это вообще не давать к нему доступа, полностью перенеся весь рендеринг страниц на сторону сервера. В этом случае пользователю показывается чистый html с крошечным количеством JS, котрый просто передаёт на сторону сервера каждое пользовательское событие типа "клик мышью на таком то элементе"
PS.
То есть я все таки прав, что отправка на сервер данных при клике - это не самый верный способ и лучше на сервер отправлять сам факт клика?
Давайте я сформулирую так: если Вы хотите защититься от вызовов API-функций в обход страницы, то да.
Рассмотрим пример. Пусть у Вас есть "выпадушка" со списокм городов. Она заполняется неким API-вызовом. Пусть "злоумышленник" пытается вызывать этот API метод для показа "выпадушки" на своём - гораздо более поппулярном - сайте и этим нагружает бэкэнд Вашего сайта
Тогда перенос рендеринга сираницы на сервер просто не даёт получить список городов иначе, чем как часть страницы.
Спасает ли это от прямого вызова функций API? Да. Теперь вызов происходит только как часть обработки страницы.
Можно ли при этом распарсить страницу всё таки вытащить список городов из неё? Тоже да.
Осталось взвесить, от каких именно "атак" надо защититься и выбрать верную стратегию.