Мне было так весело читать этот ответ. Вы тщательно проанализировали вопрос и ответили на соответствующие вопросы. Большое спасибо! Что касается перетаскивания маркера авторизации и cookie-файлов - есть причина, по которой я этого не сделал. Если мне нужно использовать это приложение в собственном приложении (например, Android), то я могу рассматривать только токен аутентификации для запросов (и я планирую различать клиентов, используя заголовок User-Agent каждого запроса. Приложение на основе браузера не может изменить заголовок User-Agent, но собственное приложение может установить для него что-то вроде «User-Agent: NativeApp» - в этом случае игнорировать отсутствие cookie.

асность. Сегодня ни одно приложение не может выжить в Интернете, если в нем не запрограммирована надлежащая безопасность - ни с помощью инфраструктуры, используемой разработчиком, ни самим разработчиком. В настоящее время я разрабатываю RESTful API для работы с использованием аутентификации на основе токенов Bearer, но я читал о XSS и CSRF-атаках.

Вопрос 1) Из того, что я прочитал, я вижу, что приложения, использующие API RESTful, использующие аутентификацию на основе токенов, уязвимы для XSS ине CSRF, если токен хранится в localStorage / sessionStorage браузера, а не в куки. Это связано с тем, что для работы CSRF приложение должно использовать файлы cookie. Я прав?

Но теперь, когда токены хранятся в localStorage / sessionStorage, приложение становится уязвимым для атак XSS. Если есть какая-либо часть приложения, которая не очищает входные данные (например, угловые входные данные очищаются платформой, но, возможно, используемая мной сторонняя библиотека по умолчанию не очищает входные данные), злоумышленник может просто внедрить вредоносный код для кражи токенов других пользователей, а затем делать аутентифицированные запросы, выдавая себя за них.

Вопрос 2) В вашем приложении есть способ защиты от обеих этих атак, использующих RESTful API. Я наткнулсяэта почта, Суть этой статьи заключается в том, что во время входа пользователя в систему и запроса токена-носителя сервер также возвращаетhttpOnly печенье, которое будет действовать, скажем,CSRFProtectionCookie, Я считаю, что решение в статье довольно надежное и обеспечивает надежную защиту. Опять я прав? Каковы ваши взгляды?

Моя заявка и моя версия подхода упомянуты в посте выше

Подход, упомянутый в посте выше, требует от меня сохраненияCSRFProtectionCookie в какой-то базе данных. Я не хочу этого делать. Я не хочу, чтобы база данных получала доступ каждый раз, когда к API был выполнен аутентифицированный запрос. Вместо этого я могу сделать следующее:

Авторизоваться

Пользователь отправляет запрос POST на конечную точку токена с именем пользователя и паролемСервер авторизации проверяет учетные данные пользователя и начинает сборку JWT с определенными утверждениями.Как часть JWT-сборки, он также генерирует случайную строку,хэши это, и добавляет это как, скажем,csrf претензии к JWT.Кроме того, следующий сервер устанавливаетhttpOnly печенье с именемXSRF-TOKEN значение которого является той же случайной строкой, нозашифрованная этот раз.Верните ответ в браузер. Браузер получает и токен на предъявителя в качестве тела ответа, иXSRF-TOKEN печенье установлено.

Аутентифицированные запросы

Приложение вызывает аутентифицированные конечные точки, добавляя токен-носитель JWT в качествеAuthorization заголовок. Браузер автоматически отправляет файлы cookie.

Сервер расшифровывает куки, чтобы получить простой текст. Затем сервер проверяет этот простой текст с помощью хэша, присутствующего в JWT.

Если найдено, перейдите к запросу. В противном случае верните несанкционированный ответ.

Я думаю, что это дает защиту как от CSRF, так и от XSS. Как токен, так и cookie (httpOnly) необходимы для выполнения аутентифицированных запросов.

Вопрос Да, это устраняет необходимость сохранять что-либо в базе данных (или нет? Я что-то пропустил?). Но каковы издержки дешифрования и проверки хешей при каждом запросе пользователя? Это больше, чем ввод-вывод базы данных? Кроме того, любые другие предложения к этому подходу или другим подходам приветствуются!

Спасибо :)

Ответы на вопрос(2)

Ваш ответ на вопрос