django csrf 处理简介

CSRF 是什么

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

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 函数

posted @ 2016-04-04 14:29  yzongyue  阅读(246)  评论(0编辑  收藏  举报