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