django csrf 处理简介

CSRF 是什么

CSRF 即跨站请求伪造,在用户不知情的状况下向有漏洞的网站发送请求。例若有正常网站A,恶意网站B, 用户若对A B 两个网站都有访问,B 可能伪造请求到 A,好比提交表单。至于具体的作法还有 CSRF 和 XSS 的区别,我决定另写一篇。。。django

Django CSRF 主要处理流程

  • 请求到达 Django 在调用 view 以前调用 csrf middleware 的 process_view 函数
  • process_view 函数检查是否存在 csrf token, 不存在则设置新的 token
  • 若是请求类型不是 '安全的'(见 RFC2616 如 POST),会有几项检查:
    • 如果 https,# todo
    • 若传入的 token 不存在,返回 403
    • 若为请求类型为 post,会检查表单中的 token 与 cookie 中 token 是否一致, 不一致则 403
  • 相关的 view 处理完后, 向用户返回 response 以前 调用 process_response 函数
  • process_response 函数取得 request 中的 token 赋给 response 并更新 max_age 等信息

其余注意的地方

若是用户在 csrf token 过时前向服务器发出请求那么这个 token 值 正常状况下是一直不变的,须要手动更新的话能够用 rotate_token 函数安全

相关文章
相关标签/搜索