一、CSRF:保护机制

Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下:

1、在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值

2、当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性

3、当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御

二、CORS:跨域访问

举例:前端和后端分别是两个不同的端⼝

前端:127.0.0.1:8081
后端:192.168.17.129:8880

现在,前端与后端分别是不同的端⼝,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不⽀持两个不同域名间相互访问数据,⽽我们需要在两个域名间相互传递数据,这时我们就要为后端添加跨域访问的⽀持。

django后端设置:

1、使用django-cors-headers扩展

a、安装

pip install django-cors-headers

b、添加子应用

INSTALLED_APPS = [ ... 'corsheaders', ...
]

c、中间件配置

MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware',...]

d、添加白名单

# 设置CORS⽩名单
CORS_ORIGIN_WHITELIST = ( 'http://127.0.0.1:8081','http://127.0.0.1:8080', 'http://localhost:8080', 'http://www.nagle.cn:8080', 'http://api.nagle.cn:8083',
)CORS_ALLOW_CREDENTIALS = True # 允许携带cookie

凡是出现在⽩名单中的域名,都可以访问后端接⼝CORS_ALLOW_CREDENTIALS 指明在跨域访问中,后端是否⽀持对cookie的操作。

2、跨域实现流程

a、浏览器会第一次先发送OPTIONS请求询问后端是否允许跨域,后端查询白名单中是否有这个域名

b、如果域名在白名单列表中则响应结果中告知浏览器允许跨域

c、浏览器第二次发送POST请求,携带用户登录数据到后端,完成登录验证操作


Django面试题——CSRF和CORS的区别相关推荐

  1. python django面试题(第八章)

    第八章 django 1. 简述http协议和常用请求头 http协议是超文本传输协议 常用请求头: 协议头 说明 Accept 可接受的响应内容类型 Accept-Charset 可接受的字符集 A ...

  2. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  3. Django框架(26.Django中的CSRF以及登录装饰器)

    CSRF简介 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造.CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件, ...

  4. 千寻和省cors精度对比_测量员新手上路攻略:解析省CORS和千寻CORS账号区别及其如何选择运用...

    原标题:测量员新手上路攻略:解析省CORS和千寻CORS账号区别及其如何选择运用 说到CORS.CORS账号,想必大家都不陌生,CORS-连续运行卫星定位服务系统,现在多代指网络RTK,是在传统RTK ...

  5. (47)FPGA面试题LATCH和DFF的区别

    1.1 FPGA面试题LATCH和DFF的区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题LATCH和DFF的区别: 5)结束语. 1.1.2 本节引 ...

  6. (44)FPGA面试题CMOS和TTL电路区别

    1.1 FPGA面试题CMOS和TTL电路区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题CMOS和TTL电路区别: 5)结束语. 1.1.2 本节引 ...

  7. Django进阶(CSRF、Ajax)

    1.跨站请求伪造:CSRF django为用户实现:防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中 ...

  8. python Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号

    Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号 Session CSRF Model 操作 Form 验证 中间件 缓存 信号 1,Session 基于coo ...

  9. 关于django 1.10 CSRF验证失败的解决方法 - python

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 最近工作闲,没事自学django,感觉这个最烦的就是各版本提供的api函数经常有变化,不是取消了就是参数没有了,网上搜到 ...

  10. Java面试题:forward和redirect区别

    Java面试题:forward和redirect区别 Java面试题 本文章借鉴该链接文章深受启发!链接在此 共同点:Servlet中有两种实现跳转的方式:forward方式和redirect方式. ...

最新文章

  1. C++11线程管理基础
  2. 【NOIP2010】【P1317】乌龟棋
  3. awk教程入门与实例练习(一)
  4. poj 3252 Round Numbers(数学)
  5. java打包成jar文件
  6. 国家哲学社会科学文献中心
  7. [转]唐骏谈职场 —— 管理者要学会让员工感动
  8. JMS 开发步骤、持久化 topic 消息与非持久化 topic 消息
  9. 32把数组排成最小的数({3,32,321}输出最小数字为321323)
  10. 阿里云云盾证书是什么?云盾证书有什么作用?
  11. 计算机内存错误 要降频,win7系统出现内存自动降频的解决方法
  12. 路由器dns服务器怎么才能自动改变,更改路由器DNS 提高网速又一方法技巧
  13. 如何知道php是32位还是64位,怎么看电脑是32位还是64位详细介绍
  14. shell脚本:循环
  15. 192.168.0.1/27 表示什么
  16. 两种Random函数的使用
  17. mysql分组取出每组地一条数据_MYSQL实现分组排序并取组内第一条数据
  18. 什么是AIM短信?AIM短信是怎么发送的?
  19. 决定固定资产折旧是当月开始折旧还是下月开始折旧的配置
  20. 图论:最大流最小割详解

热门文章

  1. Ali-tomcat之HSF框架Demo启动报错HSFServiceAddressNotFoundException
  2. 如何使用Git SVN工具 -- TortoiseGit(小乌龟)将本地项目上传至GitEE?【超详细教程】
  3. 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
  4. 如何进行IP子网划分
  5. 从应用层设置mx31-pdk板的lcd背光亮度
  6. java8 131下载_jdk 8u131下载
  7. mysql 索引间隙锁_mysql innodb间隙锁示例
  8. c语言表示三八译码器原理,三八译码器的结构、原理与设计.docx
  9. VMware安装Windows XP虚拟机并手动安装外加驱动程序
  10. STM32L4系列单片机如何使用RTC唤醒定时器进入Standby低功耗模式并唤醒+整机功耗测试