【Django必备06】——Django中session的运行机制是什么?什么是CSRF,请描述其攻击原理,在Django中如何解决?Django中CSRF的实现机制?什么是跨域请求,其有哪些方式?跨域请求Django是如何处理的
13.Django中session的运行机制是什么
django的session存储可以利用中间件来实现。需要在 settings.py 文件中注册APP、设置中间件用于启动。设置存储模式(数据库/缓存/混合存储)和配置数据库缓存用于存储,生成django_session表单用于读写。
14. 什么是CSRF,请描述其攻击原理,在Django中如何解决
CSRF(cross-site request forgery)简称跨站请求伪造。例如,你访问了信任网站A,然后网站A会用保存你的个人信息并返回给你的浏览器一个cookie,然后呢,在cookie的过期时间之内,你去访问了恶意网站B,它给你返回一些恶意请求代码,要求你去访问网站A,而你的浏览器在收到这个恶意请求之后,在你不知情的情况下,会带上保存在本地浏览器的cookie信息去访问网站A,然后网站A误以为是用户本身的操作,导致来自恶意网站C的攻击代码会被执行:发邮件,发消息,修改你的密码,购物,转账,偷窥你的个人信息,导致私人信息泄漏和账户财产安全受到威胁。
在post请求时,form表单或ajax里添加csrf_token,服务端开启CSRF中间件进行验证。
解决原理是页面添加csrf_token值后,用户通过URL访问(GET请求)该页面时,Django会在响应中自动帮我们生成cookie信息,返回给浏览器,同时在前端代码会生成一个csrf_token值,然后当你POST提交信息时,Django会自动比对cookie里和前端form表单或ajax提交上来的csrf_token值,两者一致,说明是当前浏览器发起的正常请求并处理业务逻辑返回响应,那么第三方网站拿到你的cookie值为什么不能通过验证呢,因为他没你前端的那个随机生成的token值,他总不能跑到你电脑面前查看你的浏览器前端页面自动随机生成的token值吧。
注意:你打开浏览器访问某个url(页面),默认是get请求,也就是说,你只要访问了url,对应的视图函数里只要不是if xx == post的逻辑就会执行,所以你打开页面,他会先生成cookie(token)值,返回给浏览器,然后你提交表单,或者发ajax请求时,会将浏览器的cookie信息(token值)发送给服务器进行token比对,这个过程相对于你发起了两次请求,第一次是get,第二次才是post,搞清楚这个,你才能明白csrf_token是怎么比对的。
15. Django中CSRF的实现机制
- django第1次响应来自某个客户端的请求时,服务器随机产生1个token值,把这个token保存在session中;同时服务器把这个token放到cookie中交给前端页面;
- 该客户端再次发起请求时,把这个token值加入到请求数据或者头信息中,一起传给服务器;
- 服务器校验前端请求带过来的token和session里的token是否一致。
16.什么是跨域请求,其有哪些方式
- 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源。
方式如下:
- 资源跳转: a链接、重定向、表单提交
- 资源嵌入: link/script/img/frame/dom等标签,还有样式中background:url()、@font-face()等文件外链
- 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等
17.跨域请求Django是如何处理的
使用第三方工具 django-cors-headers 即可彻底解决
- 注册app
- 添加中间件
- 配置运行跨域请求方法

浙公网安备 33010602011771号