У меня есть следующие настройки:
- Приложение внешнего интерфейса ReactJS PWA, которое использует сервисных работников для кэширования исходного кода для клиента.
- Обратный прокси-сервер ExpressJS, который передает любой запрос, который будетперейти к поддерживаемому API. Это обрабатывает процесс входа в систему, сохраняет токен на сервере и отправляет файл cookie сеанса клиенту. Файл cookie является HtttpOnly, SameSite, Secure и подписан. Прокси-сервер также проверяет, является ли соединение безопасным, реферер находится в белом списке и точно совпадает с хостом.
- Backend API находится на другом сервере с защитой входа OAuth.
Express возвращает страницу, отображаемую на стороне сервера, при первой загрузке, затем ReactJS увлажняет эту страницу и использует ее в качестве SPA. Каждый файл впоследствии кэшируется в браузере.
Каждый запрос, поступающий от клиентского приложения, обрабатывается с помощью того же токена, поскольку они не являются пользовательскими операциями. Для определенных пользовательских операций требуется электронная почта и пароль для получения нового уникального токена от API.
Моя проблема: злоумышленник может создать cookie и отправить его вместе с запросом прокрутки прокси-серверу. Это могло бы обойтись без моего приложения ReactJS, так как и реферер, и хост могут быть подделаны.
Я хотел бы узнать, как можно защитить соединение между прокси-сервером ExpressJS и PWA ReactJS.
Iдумал о CSRF с csurf , но это не сработало. Если PWA установлен на телефоне как приложение, то он будет получать доступ к прокси только при отправке запроса. Поэтому я не могу установить заголовок CSRF.
Если бы я должен был добавить токен CSRF к самому первому запросу, когда клиент обращается к серверу, и страница отображается с помощью SSR, я бы установил токен только один раз,который может быть использован столько раз, сколько хочет злоумышленник.
Есть ли правильный способ как-то заблокировать прокси для приложения?
Я не могу хранить что-либо в локальном хранилище и труднокод токенов в исходный код приложения. (Это небезопасные варианты)
Спасибо!