我正在尝试学习django,并且为了一些敏感的动作实现了csrf令牌。 但是,当我拦截请求/响应时,我在cookie字段中的每个请求中以及在实际实现了csrf_token的网页中都得到了csrf_token,在这些请求中,我获得了另一个csrf令牌作为数据中的csrfMiddleware参数。 所以我想知道为什么我的请求和响应中会出现两个csrf_tokens。
POST /demo/login/ HTTP/1.1
Host: xx.xx.xx.xx:8000
User-Agent: xxxxxx
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://xx.xx.xx.xx:8000/demo/login/
Content-Type: application/x-www-form-urlencoded
Content-Length: 125
Connection: close
Cookie: csrftoken=n4bSbWP8p9Uce3b5iAxI0UvDG0qQq7B3OwBXisww754LYztEm0wFf9ARLpVM2v7W
Upgrade-Insecure-Requests: 1
csrfmiddlewaretoken=VIqUszlij0OLyTgYEp7V2TRsNUtBqkISmaQZz52G1WYkipyxIP6Sh8WGSjYx2IeL&username=qwerty6&password=password%40123
答案 0 :(得分:0)
对于存储在cookie中的值:
为了防止遭到BREACH攻击,令牌不仅仅是秘密。秘密中会放些随机盐,然后将其加扰。
对于csrfmiddlewaretoken
:
所有传出POST表单中都存在一个名称为
csrfmiddlewaretoken
的隐藏表单字段。该字段的值再次是机密的值,同时添加了盐并用于加扰。每次调用get_token()
时都会重新生成盐,因此在每个此类响应中都会更改表单字段的值。
因此,这些值因以不同方式被加扰而不同。