【发布时间】:2015-05-03 02:15:23
【问题描述】:
我正在使用 Flask 内置会话机制。
这是我对会话机制的理解(使用烧瓶):
- 所有会话数据都存储在签名的 cookie 中(使用 app.secret_key)
- 当会话数据被修改时,cookie被改变
- 会话的数据受到保护以防止写入客户端(由于签名),但不能防止读取
想象以下场景:
- 在我的会话中,我放了一个变量
try_number=3 - 用户每执行一次操作,这个数字就会减少一个
- 如果此数字等于 0,则禁止操作
用户第一次连接应用,应用发送Set-Cookie: sesssion=Flask.sign("try_number=3"),我们称这个cookie为COOKIE_A。
用户执行他的第一个动作,他发送COOKIE_A,应用程序回复Set-Cookie: sesssion=Flask.sign("try_number=2"),我们称这个cookie为COOKIE_B。
现在,如果用户执行另一个操作,但没有使用COOKIE_B,而是再次使用COOKIE_A(例如使用curl),cookie 仍然是签名的,并且将由服务器处理,使用@ 987654329@.
因此,只有使用COOKIE_A进行所有操作,他才能“欺骗”会话机制,并在同一个会话中进行无限制的操作。
是否有任何内置机制来防止这种情况? (我不是在谈论使用 sqlite / redis 的 sn-p,而是内置解决方案)
【问题讨论】:
标签: python security session flask