码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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请求,携带用户登录数据到后端,完成登录验证操作

    在这里插入图片描述

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

    在这里插入图片描述

  • 相关阅读:
    前端 JS 实现图片元素转 BASE64 编码
    uni-app:顶部导航栏图标titleImage
    一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)
    【中秋特辑】C++比C语言更加规范、方便?是因为增加了如下特性 | C++98 & C++11 | C++难学?带领大家一步一步深度剖析 | 简单易懂
    在Linux终端中查找域名对应的IP地址
    【Semidrive】解决 X9HP reboot 导致 Android 崩溃的问题
    【C++】运算符重载 ⑩ ( 下标 [] 运算符重载 | 函数原型 int& operator[](int i) | 完整代码示例 )
    数据结构入门——排序(代码实现)(上)
    蓝牙设备在智能家居控制系统中的应用
    Docker容器监控CAdvisor+InfluxDB+Granfana(重量级监控系统)
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/126110807
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号