#django-rest-framework #django-authentication #django-sessions #django-rest-framework-jwt #django-rest-framework-simplejwt
#django-rest-framework #django-аутентификация #django-сеансы #django-rest-framework-jwt #django-rest-framework-simplejwt
Вопрос:
Я хочу использовать наиболее безопасный метод для хранения моего сеанса зарегистрированных пользователей в файле cookie. серверная часть построена на Django amp; DRF, поэтому я выбираю между плагином simplejwt для аутентификации токена или SessionAuth djangos по умолчанию. интерфейс не является SPA, но в конечном итоге также будет иметь мобильное приложение. итак, я склоняюсь к аутентификации токенов, сохраняя их в файлах cookie HttpOnly с коротким сроком службы. но в этот момент я задаюсь вопросом, не просто ли я прохожу аутентификацию сеанса окольным путем?
является ли один из них лучше другого (с точки зрения безопасности) для этого приложения?
Комментарии:
1. Вы надеетесь, что оба они реализованы одинаково надежно. Большая разница в том, что JWT позволяют вашему серверу быть «более без состояния», тогда как для аутентификации сеанса по умолчанию требуется поиск в базе данных. Это влияет на то, как ваши серверы могут масштабироваться…
Ответ №1:
Я думаю, что нет такого понятия, как самый безопасный метод аутентификации. У каждого метода есть свои плюсы и минусы. Для обеспечения безопасности приложения требуется не только хорошая аутентификация, но и другие рекомендации по обеспечению безопасности.
В Интернете существует миф о том, что файл cookie HttpOnly спасет вас в случае XSS, что не соответствует действительности. В случае XSS значения, хранящиеся в localStorage, могут быть прочитаны напрямую. Значения в файлах cookie (HttpOnly или нет) могут использоваться для вредоносных запросов в случае XSS (они не будут доступны напрямую, как в localStorage, но могут использоваться для «плохих» запросов, например, для смены пароля). Чтобы быть в безопасности от XSS, просто не храните данные аутентификации в cookie или localSotrage. Заставлять пользователей входить в систему при каждом обновлении веб-сайта — это самый безопасный.
На мой взгляд, в аутентификации нет серебряной пули, если вы планируете добавить мобильное приложение, возможно, хорошим решением может быть аутентификация по токену (может быть, JWT или DRF token или django-rest-knox).
Я использую токен DRF Djoser, в нем есть все необходимые URL-адреса для управления аутентификацией (и это просто). Приятная особенность Djoser заключается в том, что он удаляет токен при выходе из системы и создает новый токен при входе в систему. Когда кто-то украдет ваш токен, просто выйдите из системы, и он будет недействительным. Я храню токен в localStorage. Я использую React, который имеет некоторые механизмы защиты XSS. Кроме того, я использую политику безопасности контента и HTTPS (с Let’s encrypt). Я использую только доверенные пакеты. Я надеюсь, что это обеспечит безопасность приложения. Является ли он на 100% безопасным? Вероятно, нет … Есть ли что-нибудь на 100% безопасное, подключенное к Интернету? Вероятно, нет. Мой совет — сделать все возможное, чтобы быть в безопасности.