对于Django DRF后端,一种身份验证方法更安全吗?

问题描述

我想使用最安全的方法登录用户会话存储在cookie中。 后端是基于Django和DRF构建的,因此我在用于令牌身份验证的simplejwt插件或djangos认SessionAuth之间进行选择。 前端不是SPA,但最终也会有一个移动应用程序。因此,我一直倾向于令牌身份验证,将它们存储在寿命短的httpOnly cookie中。但是在那一点上,我想知道我是否实际上只是以一种绕行方式进行会话身份验证?

就此应用程序而言,在安全性方面,一个优于另一个吗?

解决方法

我认为没有最安全的身份验证方法。每种方法各有利弊。要拥有安全的应用程序,不仅需要良好的身份验证,而且还需要其他有关安全性的最佳做法。

在互联网上有一个神话,在XSS的情况下,httpOnly cookie可以为您省钱,这是不正确的。对于XSS,可以直接读取存储在localStorage中的值。在XSS的情况下,cookie中的值(无论是否为httpOnly)可用于恶意请求(不会像localStorage那样直接访问它们,但可用于“错误”请求,例如,更改密码)。为了安全起见,请不要在cookie或localSotrage中存储任何身份验证数据。每次刷新网站时都强制用户登录-这是最安全的。

我认为auth中没有灵丹妙药,如果您打算添加移动应用程序,也许一个好的解决方案可能是使用令牌身份验证(可以是JWT或DRF令牌或django-rest-knox)。

我正在使用的是DRF令牌+ Djoser,它具有管理身份验证所需的所有URL(并且很简单)。 Djoser的一个不错的功能是它在注销时删除令牌,并在登录时创建一个新令牌。当有人窃取您的令牌时,只需注销即可,它将无效。我将令牌存储在localStorage中。我正在使用具有一些XSS防御机制的React。此外,我正在使用“内容安全策略”和HTTPS(通过“让我们加密”)。我只使用受信任的程序包。我希望这可以为应用提供安全性。它是100%安全的吗?可能不是...是否有100%安全的互联网连接?可能不会。我的建议是尽最大努力确保安全。