Как скрыть большую часть моего JavaScript от пользователей, не вошедших в систему? - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над веб-приложением.Основными компонентами будут HTTP API и интерфейс, который использует много JavaScript.

Требуется аутентификация, поэтому будет страница, где пользователь входит в систему. На этой странице интерфейскод получит учетные данные от пользователя, отправит их в HTTP API и получит токен, который затем можно будет использовать для доступа к частным частям HTTP API.

Простой способ реализовать это - иметьСтраница входа ссылается на весь код JavaScript, что означает, что страница входа будет иметь: а) JavaScript, необходимый для входа в систему, и б) JavaScript, необходимый после входа в систему.Но наличие (б) является проблемой.Даже если JavaScript будет минимизирован, взломщик сможет прочитать его и найти:

  • Конечные точки HTTP;
  • как пройти аутентификацию в защищенных частях API;
  • какой тип данных ожидают защищенные части API;
  • сообщения пользователю в HTML-шаблонах и других статических строках.

Первые 3 элементаможет использоваться для проверки и, возможно, атаки на HTTP API.Последний пункт может помочь с атаками социальной инженерии или просто с выяснением того, что делает приложение.

Поэтому мой вопрос: как я могу гарантировать, что, когда пользователь не вошел в систему, он не можетвидите JavaScript, который нужен только после входа в систему?

Я думаю о чем-то вроде следующего:

  • Пользователь переходит на страницу входа, которая содержит минимум JavaScriptcode.
  • Пользователь вводит свои учетные данные.
  • JavaScript отправляет эти учетные данные на сервер и получает cookie.
  • JavaScript перенаправляет на другую страницу, назовите ее страницей2.
  • Страница 2 ссылается на JavaScript, который используется после входа в систему и хранится по URL-адресу, который содержит длинную криптографически случайную строку.

Последний пункт может быть улучшенесли сервер требует, чтобы клиент отправлял действительный файл cookie при запросе JavaScript.

Это разумный план?Что-нибудь лучше?

Поскольку это может быть полезно, я дам немного больше информации об этом веб-приложении.

Доменное имя веб-приложения и URL-адрес страницы входа.не будет опубликован, поэтому, если у вас нет учетной записи в системе, вы не будете знать URL страницы входа в систему - по крайней мере, так и задумано.

Внешний интерфейс будет использовать React .

Я нашел похожие вопросы на этом сайте, но без ответа, который является и хорошим, и подробным:

1 Ответ

0 голосов
/ 22 сентября 2018

Прежде всего на сервере должны присутствовать меры проверки и ценные бумаги.Даже когда пользователь знает конечные точки, полезную нагрузку он не сможет выполнять API-вызовы и получать данные, когда он не авторизован.

Подход на основе файлов cookie выглядит хорошо, когда после входа в систему пользователь отправляет файл cookie, который сохраняетсяи он будет отправляться на сервер при каждом запросе, где сервер сначала проверяет файл cookie, а затем отправляет запрос / ресурсы на сервер.

Это также решит вашу проблему с JS, так как до этого он служил в качестве сервера файлов / ресурсов JS.проверит, аутентифицирован ли пользователь, а затем только отправит файл JS.

Создайте файл cookie HTTP, добавьте к нему токен доступа и проверьте токен доступа для запросов, которые вы обслуживаете с сервера.Также добавьте CSP и CSRF в качестве дополнительных мер безопасности.

Читайте об 1) аутентификации на основе JWT 2) CSRF 3) CSP

Надеюсь, это поможет.

...