Является ли один из методов аутентификации более безопасным для бэкэнда Django DRF?

Я хочу использовать наиболее безопасный метод для сохранения сеанса пользователей, вошедших в систему, в файле cookie. бэкэнд построен на Django и DRF, поэтому я выбираю между плагином simplejwt для аутентификации токена или SessionAuth по умолчанию djangos. интерфейс - это не SPA, но со временем будет и мобильное приложение. поэтому я склонялся к аутентификации токенов, сохраняя их в файлах cookie httpOnly с коротким сроком службы. но в этот момент мне интересно, по сути, я просто собираюсь об аутентификации сеанса окольными путями?

один лучше другого (с точки зрения безопасности) для этого приложения?


comment
Вы бы надеялись, что оба они реализованы одинаково безопасно. Большая разница в том, что JWT позволяют вашему серверу быть более не имеющим состояния, тогда как аутентификация сеанса по умолчанию требует поиска в базе данных. Это влияет на масштабирование вашего сервера (ов)…   -  person deceze♦    schedule 28.10.2020


Ответы (1)


Я считаю, что наиболее безопасного метода аутентификации не существует. У каждого метода есть свои плюсы и минусы. Чтобы иметь безопасное приложение, необходима не только хорошая проверка подлинности, но и другие передовые методы обеспечения безопасности.

В Интернете существует миф о том, что httpOnly cookie спасет вас в случае XSS, что не соответствует действительности. В случае XSS значения, хранящиеся в localStorage, могут быть прочитаны напрямую. Значения в файлах cookie (httpOnly или нет) могут использоваться для злонамеренных запросов в случае XSS (они не будут доступны напрямую, как в localStorage, но могут использоваться для неверных запросов, например, для изменения пароля). Чтобы быть в безопасности от XSS, просто не храните никаких данных аутентификации в cookie или localSotrage. Заставляйте пользователей входить в систему каждый раз при обновлении веб-сайта - это наиболее безопасно.

На мой взгляд, в auth нет серебряной пули, если вы планируете добавить мобильное приложение, возможно, хорошим решением может быть аутентификация с помощью токена (может быть токен JWT или DRF или django-rest-knox).

Я использую токен DRF + Djoser, в нем есть все необходимые URL-адреса для управления auth ( и просто). Приятная особенность Djoser заключается в том, что он удаляет токен при выходе из системы и создает новый токен при входе в систему. Когда кто-то украдет ваш токен, просто выйдите из системы, и он станет недействительным. Я храню токен в localStorage. Я использую React, который имеет некоторые механизмы защиты от XSS. Кроме того, я использую политику безопасности контента и HTTPS (с Let's encrypt). Я использую только проверенные пакеты. Надеюсь, это обеспечит безопасность приложения. Это на 100% безопасно? Наверное, нет ... Есть ли что-нибудь 100% безопасное, подключенное к Интернету? Возможно нет. Мой совет - сделать все возможное, чтобы обезопасить себя.

person pplonski    schedule 30.10.2020