使用Pyramid Web框架,当在会话对象上调用new_csrf_token()
方法时,它是否会使先前发布的CSRF令牌无效?
例如:
old_token = session.get_csrf_token()
new_token = session.new_csrf_token()
# Is old_token still valid for requests?
答案 0 :(得分:2)
在Pyramid的某个会话对象上调用new_csrf_token()
方法将使该会话的所有先前发布的CSRF令牌无效。
Pyramid的ISession
接口仅定义了两种处理CSRF令牌的方法,get_csrf_token()
和new_csrf_token()
。此时,框架的会话接口不允许同时存在多个CSRF令牌。 (这忽略了带有签名cookie的奇怪边缘情况,这不应影响CSRF保护的安全性。)
在内部,Pyramid在请求的会话对象上调用get_csrf_token()
方法,然后将返回的值与请求中收到的令牌进行比较。
应该假设使用旧CSRF保护令牌的任何请求都将失败。