Django CSRF中间件
Django CSRF中间件
大致流程:
-
第一次访问页面
- 首先第一次访问页面,Template中的{% csrf_token %}会启动get_token,生产一个csrf_secret的值。
- 这个值在_salt_cipher_secret中随机生产一个与csrf_secret长度相同的salt,利用salt加密csrf_secret,两个字符串拼接形成csrf_token,request.META['CSRF_COOKIE'] = csrf_token 并设置到cookie里面。
- get_token返回的用随机生成的另外一个salt加密csrf_secret,同样拼接返回放入隐藏的input之中
-
向页面提交表单
提交的cookie中含有的csrf_token与表单提交的csrfmiddlewaretoken在process_view进行解密,比对,如果解密出来的数值不同直接返回_reject() -
向页面提交Ajax
同样,提交的cookie中含有的csrf_token与Ajax中含有X-csrftoken在process_view进行解密,比对。如果解密出来的结果不同则直接返回_reject() -
如果发出的请求是'GET', 'HEAD', 'OPTIONS', 'TRACE' 中的一种,或者view函数中加上了csrf_exempt装饰器,则不进行校验。
详细: https://blog.csdn.net/qq_27952549/article/details/82392790
token验证原理 https://www.jianshu.com/p/7fbb60001018