【发布时间】:2012-09-18 21:23:32
【问题描述】:
我们可以为每个表单请求甚至每个请求更改 CSRF 令牌,而不是为一个活动会话更改相同的令牌吗?
【问题讨论】:
-
出于兴趣:你想达到什么目的?
-
增加安全实践。事件很难,攻击者仍有机会窃取 session-cookie 上的 csrf 令牌
我们可以为每个表单请求甚至每个请求更改 CSRF 令牌,而不是为一个活动会话更改相同的令牌吗?
【问题讨论】:
假设您有权访问 request 对象:
from django.middleware.csrf import rotate_token
rotate_token(request)
【讨论】:
在 csrf 中间件中,他们做了这样的事情,这会覆盖 cookie 集:
request.META["CSRF_COOKIE"] = _get_new_csrf_key()
您可以通过from django.middleware.csrf import _get_new_csrf_key() 导入_get_new_csrf_key()。由于这是一种私有方法,我建议不要使用这样的黑客攻击。
【讨论】:
如果你想在中间件中使用它:
from django.middleware.csrf import rotate_token
class CSRFRefresh(object):
def process_response(self, request, response):
rotate_token(request)
return response
【讨论】: