位置: 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 静态方法)

  • 煤炭企业生产能力
  • 本期免税额怎么填写
  • 处置子公司全部股权会计处理 企业会计准则
  • 符合条件的居民企业之间股息红利
  • 销售积分税务处理的特点
  • 出售生产线计入哪里
  • 建筑公司收到劳务费
  • 公司出差开自己的车怎么计算损耗
  • 企业发生的借款费用,可直接归属于
  • 开票系统服务费全额抵扣会计分录怎么做
  • 公司给员工的奖品是否要扣税
  • 企业未实际列支教育经费要纳税调整吗?
  • 小微企业分公司 企业所得税优惠
  • 代扣工资申请怎么写
  • 有线电视基本收视维护费免征增值税
  • 统借统贷协议
  • 企业的商誉会一直存在吗
  • 发票 发票联
  • 供热企业所使用的燃气
  • 代持的股份
  • 电子承兑签收后多久可以到账
  • 生产车间领用材料45000元,投入生产
  • 连续亏损的公司还要去吗
  • 公司从一个帐户里扣税吗
  • 事业单位自由资金怎么入账
  • 企业职工福利有哪些
  • 买入投资性房地产的会计处理
  • linux的使用场合
  • php查找文件目录下文件
  • php魔术方法的讲解与使用
  • 企业收到款项
  • 预收预付不一致什么意思
  • shwiconem.exe - shwiconem是什么进程 有什么用
  • 补提去年的所得税费用是怎么做分录?
  • 什么情况下计提信用减值损失
  • 集团公司管理费提取办法
  • 房产税城镇土地使用税申报期限
  • 产品成本核算应正确划分哪些方面的费用界限
  • devtools vue
  • vue backbone
  • 深入理解ts
  • 图像识别算法
  • vue要掌握哪些知识?
  • 资金账簿印花税怎么算
  • 应付账款可以用预收账款代替嘛
  • 公司如何减资
  • 外贸企业出口退税会计分录怎么做
  • 加油充值预付卡怎么做账
  • 终止经营列报的相关表述
  • 自然人税收管理系统扣缴客户端官网
  • 电子承兑对方拒绝签收多久能到账
  • 送货单收据怎么写
  • 房屋租赁的发票能抵扣吗
  • db2 日期查询
  • 固定资产净残值和净值的区别
  • 企业如何代员工做个税汇算清缴
  • 未付货款尾款会计分录
  • 销售产品收取的价款
  • 核定征收方式的小型微利企业可以享受
  • 企业的职工福利费
  • 买断式与回购式
  • 哪些人必须办理纳税登记
  • mysql5.7.21安装
  • mysql基本sql语句大全(基础用语篇)
  • mysql的基本sql语句
  • Fedora25踏上Wayland的路上讲解
  • windowsserver2008r2激活密钥
  • mac安装git客户端
  • linux磁盘配额实验报告
  • window怎么开启自动更新
  • windows8桌面图标没有了
  • win10系统如何删除用户账户
  • 水模拟软件
  • 11月编程语言排行榜出炉
  • perl中的$_
  • android 启动器 设置
  • android 桌面开发
  • 国税税控开票系统
  • 租房完税证明需要多长时间内的
  • 2022年安徽城镇非私营单位平均工资
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设