让django更加努力地防止会话窃取攻击

django-paranoid-sessions的Python项目详细描述


偏执会话:对django会话进行更全面的安全检查

此模块为django实现"偏执会话"-在安全性方面比标准版本要难得多的会话。旨在使
会话窃取攻击尽可能困难,可以使用的额外措施是:

*http头指纹(例如远程地址、http用户代理)
*每个请求的nonce(具有可配置的超时和重复窗口)
*会话密钥的周期性循环
*为秒维护第二个密钥URE连接
*将会话密钥标记为"httponly"

与往常一样,这里有一个折衷方案-这些安全措施包括增加每个请求的处理量
以及更频繁地写入会话存储。您还可能会有终止看起来可疑的有效会话的风险。
但是通过调整此模块提供的各种设置,您应该能够找到适合您的项目的折衷方案。


中间件类=(

'django.contrib.sessions.middleware.sessionmiddleware',
'paranoidsessions.paranoidsessionmiddleware',




根据名称,此模块的默认设置被设计为
,以牺牲性能和用户方便为代价最大限度地提高安全性。
很可能希望将它们调整为更适合您的应用程序的折衷方案,但在这样做之前,您应该了解折衷方案。

来自同一会话的多个请求之间的竞争条件意味着nonce的使用不能完全串行。
如果用户连续快速发送两个请求,以便在收到第一个响应之前发送第二个请求,则这些请求将有效地共享nonce。由于
请求可能由不同的服务器进程处理,这个场景更加复杂。


为了管理这种重叠的请求,这个模块允许在
中有一个小窗口,重复的nonce被视为有效。为了协调跨多个服务器进程的nonce生成
,它们是基于共享的随机种子值从伪随机流
构建的。对于大多数应用程序来说,这应该是足够不可伪造的
-如果您的攻击者有足够的决心破坏以这种方式生成的
nonce,您应该考虑通过安全通道为整个站点提供服务!

以下设置可用于调整此模块的行为:

p会话检查标题:要检查每个请求的标题列表。如果这些头中的任何一个与最初创建会话时发送的头不同,
会话将被清除。

客户端必须在每个请求
时返回有效的nonce,否则会话将被清除。将此值设置为更大的值将降低安全性,但会降低写入会话存储的频率。将其设置为零意味着每个
请求都会生成一个新的nonce。将其设置为"无"将完全禁用nonce的使用。

这对应于任意给定时间服务器和客户机之间可能"正在运行"的nonce
更新数。将其设置为零将中断重叠的请求。

您需要将其设置为大于1,您的站点有一些严重的
性能问题。Django的内置开发服务器
*并不是有一些严重的性能问题;对于您的开发环境,请将其设置为至少3


被接受。此窗口应尽可能小,但如果用户要执行多个重叠请求,则需要

将其设置为"无"表示该窗口永不超时。

会话键将被循环。只有在不使用nonce的情况下才需要这样做;
区别在于密钥循环不需要客户机发送单独的nonce cookie。将其设置为"无"可禁用密钥循环。

default:none





default:"偏执的会话数据"




默认值:"sessionnonce"



psession_secure_cookie_name:用于附加"secure
connections only"会话密钥的cookie的名称。此附加信息仅通过安全连接在服务器和客户端之间传递;如果嗅探器或中间人攻击破坏了所有http通信,
它们仍然无法通过https伪造会话请求。

Ionid_https"



psession_clear_session_函数:在检测到
潜在攻击时调用函数以清除会话。可以给出一个可导入的名称或可调用的对象
,将一个请求对象作为它的唯一参数。


default:lambda req:req.session.flush()


如果此函数返回false,则不会对其进行偏执验证。这可能有助于减少媒体文件等低风险目标上的
处理开销,但
将使攻击者有更多机会破坏给定的nonce。


默认值:lambda req:true



请求,此模块的默认设置可能太严格,将导致有效的用户会话被终止。考虑以下一些调整:

*将nonce_timeout设置为一个较小的正值,例如1秒
*增加nonce_window和nonce_window_timeout值
*过滤对媒体url的请求以减少nonce循环

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何为ConcurrentHashMap使用并设置适当的并发级别?   java泛型方法,运行时错误,   java在页面上显示加载的图像   java Paypal定期直接支付问题   java如何延迟重新绘制组件   JavaSpringBoot+Hibernate如何维护@Transient字段   java在其方法中获取关于类的信息   在java中将别名添加到枚举   java如何解决向google报告成绩时“需要重新连接客户端”的问题   清晰的java图像背景   java未找到适合JDateChooser的构造函数(字符串、字符串、字符)   java LRU缓存实现。某些测试用例的代码失败   if语句Java嵌套的if/Else条件   java JSoup“wrap”并非每次都按预期工作   Java Spring引导循环依赖于一个环境   ssl证书无法通过Java和IntelliJ连接到SOAP服务   带整数验证的Java扫描器   java在Flex中呈现具有动态列的datagrid   java Android:通过用户选择的选项将文件上载到服务器   子类中的java抛出错误、异常和运行时异常