Я считаю, что наиболее безопасного метода аутентификации не существует. У каждого метода есть свои плюсы и минусы. Чтобы иметь безопасное приложение, необходима не только хорошая проверка подлинности, но и другие передовые методы обеспечения безопасности.
В Интернете существует миф о том, что 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