Я работаю над веб-приложением.Основными компонентами будут 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 .
Я нашел похожие вопросы на этом сайте, но без ответа, который является и хорошим, и подробным: