@sokira

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы