csrf

描述#

CSRF利用用户正常登录产生的cookie,利用钓鱼网站传给用户发送一张有内容的表单,并携带用户的正常cookies访问网站,达到将伪造的表单通过用户之手传到网站上的目的。为了避免用户提交其他网站生成的表单,网站在用户登录时签发给用户一个csrftoken,该token不存放在cookie中(存放在浏览器的local storage中),由网站前端js调用(识别{{form.field_name}} ),在提交表单时需要携带该token从而验证该表单来自于本网站(服务器端的token验证数据存放在session中)。

CSRF攻击攻击原理及过程#

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器

  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行

同源策略:

现在有一个网站:http://www.a.com/a。 https://www.a.com/a :不同源,协议不同,此处协议是https! http://www.b.com/a :不同源,域名不同 http://www.a.com:8080/a :不同源,端口不同 http://www.a.com/b :同源 综上,跨域就是请求路径的url不同源。

  1. Local / session storage 不会跨域工作,请使用一个标记 cookie:基于浏览器的同源策略,
  2. 现在有一个网站:http://www.a.com/a。
    
    https://www.a.com/a          :不同源,协议不同,此处协议是https!
    
    http://www.b.com/a           :不同源,域名不同
    
    http://www.a.com:8080/a      :不同源,端口不同
    
    http://www.a.com/b           :同源
    
    综上,跨域就是请求路径的url不同源。  

     鉴权模型设计

     django csrf setting 开启:

    视图,csrf拦截和auth鉴权设计:

原文地址:https://www.cnblogs.com/SunshineKimi/p/13754191.html