• Django面试题——CSRF和CORS的区别


    在这里插入图片描述

    一、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
    
    • 1

    b、添加子应用

    INSTALLED_APPS = [ 
    	... 
    	'corsheaders', 
    	...
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    c、中间件配置

    MIDDLEWARE = [ 
    	'corsheaders.middleware.CorsMiddleware',
    	 ...
     ]
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    2、跨域实现流程

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

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

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

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    C++_pen_静态与常量
    在 Java 中实现 Kafka Producer 的单例模式
    并发编程二、CPU多级缓存架构与MESI协议的诞生
    最优化:建模、算法与理论(最优性理论2
    Java初阶数据结构二叉树实现+练习完整(工程文件后序会进行上传)
    音视频从入门到精通——FFmpeg结构体:AVFrame分析
    Linux shell编程学习笔记5:变量命名规则、变量类型、使用变量时要注意的事项
    //判断一颗树是不是镜面树
    HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站
    【Windows】磁盘管理无法删除卷
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/126110807