csrf

Django 的CSRF保护机制

什么是CSRF

CSRF(Cross Site Request Forgery),跨站点请求伪造。也被称为one-click-attack或者session riding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。

Django提供的CSRF防护机制

django第一次响应来自某个客户端的请求时,会在服务器端随机生成一个token,把这个token放在cookie里。然后每次POST请求都会带上这个token,这样就能避免CSRF攻击。

  • 在返回的HTTP响应的cookie里,django会为你添加一个csrftoken字段,其值为一个自动生成的token
  • 在所有的POST表单时,必须包含一个csrfmiddlewaretoken字段(只需要在模板里加一个tag,django就会自动帮你生成)
  • 在处理POST请求之前,django会验证这个请求的cookie里的csrftoken字段的值和提交的表单里的csrfmiddlewaretoken字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能来自别人的csrf攻击,返回403 Forbidden.
  • 在所有ajax POST请求里,添加一个X-CSRFTOKEN header,其值为cookie里的csrftoken值

Django里如何使用CSRF防护

  • 首先,最基本的原则是: GET请求不要用,有危险性,也就是任何处理GET请求的代码对资源的访问都一定要是”只读”的
  • 要启用django.middleware.csrf.CsrfViewMiddleware这个中间件
  • 再次,在所有的POST表单元素时,需要加上一个
  • 在渲染模块时,使用RequestContext.RequestContext会处理csr_token这个tag,从而自动为表单添加一个名为csrfmiddlewaretoke的input

文章作者: 阿培
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿培 !
 上一篇
二进制部署k8s 二进制部署k8s
Centos7系统使用二进制包部署kubernetes1.13集群 一 简述Kubernetes1.13 的核心特性包括:利用kubeadm简化集群管理、容器存储接口(CSI)以及将CoreDNS作为默认DNS。利用kubeadm简化集群管
2019-04-30
下一篇 
mysqldump mysqldump
mysqldump -uroot -phonjia@mariadb –single-transaction –master-data=2 –flush-logs -R -E lottery | gzip > /backupmyql/l
2018-08-02
  目录