@sokira

Как закрыть XMLHttpRequest от общего доступа?

У меня на странице есть запросы типа XMLHttpRequest из javascript к моему же серверу. Они возвращают данные в json формате, которые потом используются на странице.

Можно ли как-то сделать так, чтобы никто другой не мог повторить эти запросы и получить мои данные в json-формате?

Может настройками nginx сделать так, чтобы эти XMLHttpRequest запросы нельзя было выполнить напрямую? Чтобы нельзя было адресу XMLHttpRequest получить данные.

Какие есть варианты?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
IDONTSUDO
@IDONTSUDO
ЧСВ программистов идет в комплекте с первой IDE.
Можно ли как-то сделать так, чтобы никто другой не мог повторить эти запросы и получить мои данные в json-формате?
Используй механизмы ссесий. По типу Cookies/JWT.
P.S. советовал бы JWT отличная лекция Ильи Климова на эту тему.

Может настройками nginx сделать так, чтобы эти XMLHttpRequest запросы нельзя было выполнить напрямую? Чтобы нельзя было адресу XMLHttpRequest получить данные.
nginx это сервер который просто проксирует контент
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Использовать одноразовый сессионный ключ, чтобы форсить сценарий:
«сначала запроси страницу, и только потом — json-данные».
При генерации страницы, на сервере создаётся ключ, который записывается в сессию (на сервере) и в код страницы.
При запросе данных из страницы, с запросом отправляется и этот ключ, где сравнивается с записанным в сессию. Только при совпадении отдаются данные, а ключ удаляется из сессии.

Чтобы не передавать данные в открытом виде, можно их дополнительно упаковать-зашифровать. См. JSON Web Tokens. Но это чисто декоративно, т.к. всё, что оказывается в итоге в открытом виде в браузере клиента – считай, утекло.
Ответ написан
dollar
@dollar
В дополнение к Сергей Соколов могу подсказать следующий этап: защита от кражи сессии. Это делается путем нумерации запросов. То есть каждый запрос передается число, которое на 1 больше предыдущего. Так что даже если кто-то украдет сессию и сможет ее использовать, у пользователя она протухнет и вы сможете показать ему ошибки рассинхронизации. И уже сам пользователь начнет искать злоумышленника.

Хотя если сам пользователь является злоумышленником, причем умным и упёртым, то понадобится дальше наращивать защиту. Но это уже война снаряда и брони, а она, как известно, вечная, и выигрывает тот, у кого больше ресурсов и терпения.
Ответ написан
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Люблю Финский металкор
Настройте CORS, но это не спасет от вариантов вне контекста браузера. В общем то особо то больше и никак.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Selectel Санкт-Петербург
от 170 000 руб.
Chenii Санкт-Петербург
от 1 500 до 3 500 usd.
14 нояб. 2019, в 18:57
120000 руб./за проект
14 нояб. 2019, в 18:05
16000 руб./за проект