2024-04-26 04:52:56 发布
网友
如何创建新的干净会话并使烧瓶中的当前会话无效?
我使用make_null_session()还是open_session()?
make_null_session()
open_session()
我打电话给^{}就可以了。
编辑:
在阅读了另一个答案中的评论后,我发现您正在尝试防止重播攻击,这种攻击可能是使用以前发出的cookie造成的。我用这种方法尽可能地解决了这个问题:
save_session()
save_cookie()
session_expires
在自定义的save_session()中复制Flask代码会使这种方法变得有点难看和脆弱,但是为了更改传递给save_cookie()的参数,有必要这样做。如果Flask能让这一切变得更简单,或者至少实现了它自己的防范重播攻击的措施,那就太好了。
*警告:此方法本身无法阻止会话cookie有效生存期内可能发生的重播攻击。基于cookie的会话的这个基本问题在RFC 6896和A Secure Cookie Protocol by Liu, Kovacs, Huang, Gouda中讨论。
如果设置了特定标志,则可以添加^{}回调来删除会话cookie:
@app.after_request def remove_if_invalid(response): if "__invalidate__" in session: response.delete_cookie(app.session_cookie_name) return response
然后,只要想使会话无效,就可以简单地设置该会话密钥:
@app.route("/logout") def logout(): session["__invalidate__"] = True return redirect(url_for("index"))
另请参见:http://werkzeug.pocoo.org/docs/wrappers/#werkzeug.wrappers.BaseResponse.delete_cookie
如果你有安全问题(每个人都应该有),答案是:
这是不可能的
Flask使用基于cookie的会话。编辑或删除会话时,向客户端发送删除cookie的请求,普通客户端(浏览器)将执行此操作。但如果会话被攻击者劫持,则攻击者的会话仍然有效。
我打电话给^{} 就可以了。
编辑:
在阅读了另一个答案中的评论后,我发现您正在尝试防止重播攻击,这种攻击可能是使用以前发出的cookie造成的。我用这种方法尽可能地解决了这个问题:
save_session()
调用save_cookie()
时,让它在未来30分钟内传递一个session_expires
参数。这将导致超过30分钟的cookie被视为无效。save_session()
每隔一段时间更新一个会话变量,以确保定期重写cookie及其session_expires
时间。(我将此会话变量命名为'u refresh',并将当前时间存储在其中,然后仅当上次存储时间已过几秒时才重写它。这种优化避免了在每个HTTP请求上重写cookie。)在自定义的
save_session()
中复制Flask代码会使这种方法变得有点难看和脆弱,但是为了更改传递给save_cookie()
的参数,有必要这样做。如果Flask能让这一切变得更简单,或者至少实现了它自己的防范重播攻击的措施,那就太好了。*警告:此方法本身无法阻止会话cookie有效生存期内可能发生的重播攻击。基于cookie的会话的这个基本问题在RFC 6896和A Secure Cookie Protocol by Liu, Kovacs, Huang, Gouda中讨论。
如果设置了特定标志,则可以添加^{} 回调来删除会话cookie:
然后,只要想使会话无效,就可以简单地设置该会话密钥:
另请参见:http://werkzeug.pocoo.org/docs/wrappers/#werkzeug.wrappers.BaseResponse.delete_cookie
如果你有安全问题(每个人都应该有),答案是:
这是不可能的
Flask使用基于cookie的会话。编辑或删除会话时,向客户端发送删除cookie的请求,普通客户端(浏览器)将执行此操作。但如果会话被攻击者劫持,则攻击者的会话仍然有效。
相关问题 更多 >
编程相关推荐