位置: IT常识 - 正文

CORS跨域资源共享问题(CORS跨域资源共享漏洞)

编辑:rootadmin
同源策略介绍 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现 请求的url地址,必须与浏览器上的url地址处于同域上,也就 ... 同源策略介绍

推荐整理分享CORS跨域资源共享问题(CORS跨域资源共享漏洞),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cors跨域解决方案,cors跨域资源共享漏洞修复 ngnix,cors跨域资源共享漏洞修复,cors跨域资源共享漏洞修复,cors跨域资源共享,cors跨域资源共享解决,cors跨域资源共享漏洞修复,cors跨域资源共享,内容如对您有帮助,希望把文章链接给更多的朋友!

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现

请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.

比如:我在本地上的域名是127.0.0.1:8000,请求另外一个域名:127.0.0.1:8001一段数据

浏览器上就会报错,个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险

已拦截跨源请求:同源策略禁止读取位于 http://127.0.0.1:8001/SendAjax/ 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。

但是注意,项目2中的访问已经发生了,说明是浏览器对非同源请求返回的结果做了拦截

CORS跨域资源共享介绍

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

CORS基本流程

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

浏览器发出CORS简单请求,只需要在头信息之中增加一个Origin字段。

CORS跨域资源共享问题(CORS跨域资源共享漏洞)

浏览器发出CORS非简单请求,会在正式通信之前,增加一次HTTP查询请求,称为”预检”请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

CORS两种请求详解

只要同时满足以下两大条件,就属于简单请求。

(1) 请求方法是以下三种方法之一:HEADGETPOST(2)HTTP的头信息不超出以下几种字段:AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

凡是不同时满足上面两个条件,就属于非简单请求。

浏览器对这两种请求的处理,是不一样的。

* 简单请求和非简单请求的区别? 简单请求:一次请求 非简单请求:两次请求,在发送数据之前会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输。* 关于“预检”- 请求方式:OPTIONS- “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息- 如何“预检” => 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过 Access-Control-Request-Method => 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则“预检”不通过 Access-Control-Request-Headers

支持跨域,简单请求

服务器设置响应头:Access-Control-Allow-Origin = ‘域名’ 或 ‘*’

支持跨域,复杂请求

由于复杂请求时,首先会发送“预检”请求,如果“预检”成功,则发送真实数据。

“预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method“预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-HeadersDjango项目中支持CORS

在返回的结果中加入允许信息(简单请求)

def test(request): import json obj=HttpResponse(json.dumps({'name':'lqz'})) # obj['Access-Control-Allow-Origin']='*' 所有的都可以通过 obj['Access-Control-Allow-Origin']='http://127.0.0.1:8004' #只针对该域名通过 return obj

放到中间件处理复杂和简单请求:

from django.utils.deprecation import MiddlewareMixinclass CorsMiddleWare(MiddlewareMixin): def process_response(self,request,response): if request.method=="OPTIONS": #可以加* response["Access-Control-Allow-Headers"]="Content-Type" response["Access-Control-Allow-Origin"] = "http://localhost:8080" return responsedjango 使用django-cors-headers 解决跨域问题

1、使用pip安装

pip install django-cors-headers

2、添加到setting的app中

INSTALLED_APPS = (...'corsheaders',...)

3、添加中间件

MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10...'corsheaders.middleware.CorsMiddleware','django.middleware.common.CommonMiddleware',...]

4、setting下面添加下面的配置

CORS_ALLOW_CREDENTIALS = TrueCORS_ORIGIN_ALLOW_ALL = TrueCORS_ORIGIN_WHITELIST = ('*')CORS_ALLOW_METHODS = ('DELETE','GET','OPTIONS','PATCH','POST','PUT','VIEW',)CORS_ALLOW_HEADERS = ('XMLHttpRequest','X_FILENAME','accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with','Pragma',)
本文链接地址:https://www.jiuchutong.com/zhishi/313268.html 转载请保留说明!

上一篇:织梦dedecms网站怎么添加星期(织梦官方网站)

下一篇:python静态方法的用法(python3 静态方法)

  • 股权转让需要缴纳企业所得税吗
  • 公司基本户可以转私人账户吗
  • 印刷宣传册是违法吗
  • 企业销售软件需要结转成本吗
  • 预存1000送100促销活动方案
  • 房产评估费会计分录
  • 新个税年终奖怎么申报
  • 先抵扣后付款怎么做账
  • 商贸公司批发零食怎么样
  • 出口发票税率为0还能退税吗
  • 餐饮业开专票几个点
  • 增值税报表上填写什么
  • 购买食堂餐具开票怎么开
  • 小规模企业增值税税率
  • 政府性基金预算收入包括
  • 公司体检如何入账
  • 国外消费发票可以抵扣吗
  • 生产成本在资产负债表中怎么填
  • 固定资产评估增值后如何入账
  • 房产税具体税种包括哪些
  • 为什么iphone手机闹钟定了不响
  • 递延收益为什么计税基础为0
  • 移动操作系统有哪些主要特点和功能
  • ubuntu18更换为阿里源
  • 个人开工程款票在哪开票
  • 远期结汇账务处理办法
  • 来料加工方式中,料件和加工后成品的所有权
  • 吃鸡显卡推荐配置1060 5g
  • 会计人员报销差额是多少
  • 业务实际发生没得取得发票怎么做账
  • 前端vscode配置
  • 固定资产闲置能报废吗
  • pytorch map
  • 大前端技术
  • 公司的注册资本是什么意思
  • 长期待摊费用账务处理
  • 暂估入库成本结转处理低于实际成本怎么办
  • 预提财务费用
  • 租赁办公场所的法律规定
  • C++ lower_bound/upper_bound用法解析
  • 以前年度损益调整会计分录
  • SQLite教程(十三):C语言编程实例代码(1)
  • 医用增值税发票
  • 经营范围没有的项目可以做吗
  • 外贸企业应交税费计入
  • access2000是什么
  • PostgreSQL中的XML操作函数代码
  • 私车公用私车的区别在哪
  • 无票收入是怎么算的
  • 小规模纳税人减按1%账务处理
  • 递延收益按多少折算
  • 进项税认证怎么按税率统计明细
  • 工程增值税抵扣比例
  • sql server常规错误
  • xp系统环境变量
  • windowsserver2008r2忘记开机密码怎么办
  • 系统备份恢复系统
  • winxp怎么做系统
  • 手动防止Ping攻击方法(无需防火墙)
  • Linux系统配置要求
  • windows 7的用户类型
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • windows7磁盘清理命令
  • vps如何搭建ss
  • win7系统显卡驱动怎么安装
  • win7不识别大于4T的盘
  • linux文件解压gz
  • Linux中SSH的SCP传输命令运用详解
  • android开发环境搭建需要哪些工具
  • 基于jquery实现可定制的web在线富文本编辑器附源码下载
  • nodejs项目开发
  • jquery库文件
  • iframe隐藏页面内容
  • javascript例题
  • node.js详解
  • ShareSdk实现第三方分享功能
  • JavaScript冒泡排序都不会写
  • 华为领导班子成员名单
  • 自己建造房屋
  • 税务局宪法宣传日
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设