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

posted @ 2019-08-03 16:52  写bug的日子  阅读(88)  评论(0编辑  收藏  举报