使用Django存储会话最安全的方式是什么?

6vl6ewon  于 2023-11-20  发布在  Go
关注(0)|答案(2)|浏览(169)

我应该使用什么Django会话引擎来增强安全性?

dgenwo3n

dgenwo3n1#

如果“安全”意味着你需要以低丢失率存储数据,即耐久性,那么dbcached_db后端是最好的。(除了在特殊情况下,通常避免filecache是为更接近于一次性的数据而设计的,signed_cookies太依赖于浏览器/用户行为)
如果您的意思是希望私密地存储数据,并且第三方没有机会看到它,并且您设想的攻击最有可能针对您的服务器而不是用户计算机,那么signed_cookies可能是最好的(或者直接使用set_signed_cookie而不是使用会话),因为您不会将数据存储在您的服务器上。您需要了解Cookie的限制。
如果您的意思是您想私密地存储数据,但您设想的攻击最有可能针对您用户的计算机,那么signed_cookies就不存在了,因为cookie中的数据可以被浏览器中访问cookie的人轻松读取。cookie数据是签名的,但不加密。
如果你关心数据的完整性,即它不能被攻击者或用户篡改,那么不同的后端提供类似的保证水平:由于使用MAC,签名的cookie很难篡改,数据库后端很难,因为攻击者不应该访问数据库(如果他们这样做,你可能会有更大的问题)。
简而言之,您需要知道您对哪些特定的安全属性感兴趣,以及您正在考虑哪些攻击向量。

jfewjypa

jfewjypa2#

TLDR; db会话引擎似乎是最安全的,但需要特别小心地创建备份。
Django提供了这些会话引擎:

  • django.contrib.sessions.backends.db
  • django.contrib.sessions.backends.file
  • django.contrib.sessions.backends.cache
  • django.contrib.sessions.backends.cached_db
  • django.contrib.sessions.backends.signed_cookies

此外,您可以编写自己的或使用第三方,如django-redis-sessions
经过一点研究,我发现只有dbfile引擎实现了clear_expired方法。当您调用clearsessions管理命令时,会调用此方法。
因此,当您使用其他会话引擎时,属于离开网站而没有注销的用户的信息仍然可以读取他们会话中的内容。
您只能在单个服务器上使用file会话引擎,这不适用于扩展。因此,我最安全的选择是使用db会话引擎,并确保django_session表从PostgreSQL pg_dump --exclude-table-data参数的数据库备份中排除。

相关问题