我正在 Django 中开发一个具有一些特定安全要求的应用程序。其中之一是禁用默认行为以自动延长活动会话的到期时间。是的,我希望会话过期,除非明确更新(例如重新登录、更新令牌等 - 现在不相关)。
这如何提高安全性?那么,控制受害者 PC 的恶意用户将只能在有限的时间内访问受害者经过身份验证的应用程序。
不幸的是,使用django.contrib.sessions
,这似乎是不可配置的,因为会话的修改时间被彻底使用,并且在后端(backends/base.py
)的基础中用于服务器端存储以及在中间件组件(middleware.py
)中用于 HTTP cookie。SessionStore._session_expiry
此外,由于只有会话数据被加载到会话对象中,因此只能以内部修改时间的相对形式访问到期时间( )。因此,除非我们直接询问模型(Session.objects.get(pk=s.session_key).expire_date
- 呃,丑陋),否则我们不知道过期日期是什么。
我该如何正确实施?get_expiry_*
如果不重新实现方法和process_response()
中间件功能,这可能吗?我宁愿避免这种情况,因为我认为它可能会在以后中断,以防 Django 得到更新。
通过设置自定义会话变量来以我自己的方式(如在此答案中)跟踪到期来尝试这一点似乎不仅多余,而且还会混淆其他应用程序/代码询问SessionStore.get_expiry_age()
,而我的中间件将强制执行不同的到期。因此,我认为这种方法对于我的目的来说质量太低了。
我的上述假设是否正确?我是否应该将此作为一项新功能提出要求并同时自己修补它?