Web - JSONP和同源策略漫谈

Web安全2.3:CSP安全策略、Cookie、Session、同源策略、HTML DOM树 文章目录Web安全2.3:CSP安全策略:一、CSP:1、CSP的部分命令:2、策略控制:(1)首先我们先把meta标签注释掉,如下:(2)我们这次只注释掉header:(3)两段CSP代码都不注释:3、CSP完整命令:二、Cookie安全:三、Session: Web安全2.3:CSP安全策略: 一、CSP: 浏览器是XSS等前端攻击的战场,有些浏览器附带一些安全策略,包含自带的XSS过滤、同源... 阅读详情

Web - JSONP和同源策略漫谈

0x00 前言

关于JSONP网上有很多文章了,我也是在拜读了别人的文章的基础上来写写自己的看法,这样可以加深自己印象,巩固一下学习效果。我们需要做的就是站在巨人的肩膀上眺望远方。

0x01 起

在Web前端开发中有一种安全机制,Javascript脚本只能访问与它同域的内容,这就是同源策略。
这里就需要先说明一个问题:如果确定脚本的域?

html页面中试用脚本有两种方式:内联和引用。

上图中滑红框部分,src为引用方式,直接在script中写代码是内联方式。
如果html的页面url为:http://a.huangjacky.com/a.html,那么内联方式脚本的域是a.huangjacky.com,这应该比较容易理解。
引用方式有两种情况,引用的js文件就是A站点、引用的js是其他站点,但是不过是内联还是引用方式的脚本代码它执行都是在当前html下,因此它的域是和html相同的。

图中例子用的是AJAX网络请求,其实Javascript访问内容还可以DOM操作,当iframe之间的域不相同时,也无法通过Javascript去操作其他iframe中的DOM元素。

上面这个还比较基础,老鸟别喷。

现在开始我们的例子:

  1. 有两个站点a.huangjacky.com, b.huangjacky.com
  2. A站点的a.html要去请求B站点的b.php

a.html的代码如上图,b.php的代码如下:

1 <?php
2 echo"from b site";

我们点击a.html中按钮看一下会是什么样的效果?


提示说的很清楚,A站的Javascript的XMLHttpRequest对象无法加载B站,因为没有Access-Control-Allow-Origin头,那么接下来我们就来看看这个HTTP头有什么用?

在跨域HTTP请求中,会有一个HTTP头叫Origin,上图中也可以看出来,响应中HTTP头中的Access-Control-Allow-Origin包含Origin域,那么就满足跨域,浏览器就不会报错了,接下来我们修改PHP代码:

1 <?php
2 header("Access-Control-Allow-Origin: http://a.huangjacky.com");
3 echo"from b site"

代码中就增加一行header设置,看看运行效果:

运行正常了,AJAX也获得到了B站数据了,但是如果有个C站也要获取B站数据呢?我们分别尝试设置Access-Control-Allow-Orgin为http://huangjacky.com和http://*.huangjacky.com。都出现了通源策略访问错误的提示,我这里就不截图了,我肯定是试了的。

现在问题出来了,我就是有这样的需求,多个子域都要访问B站来获取数据,怎么办?

其实这里可以设置Access-Control-Allow-Orgin: * ,就可以了。

但是这样安全性又是一个问题了,所有的网站都可以访问来访问数据了,而Access-Control-Allow-Orgin头要么是*,要么指定子域名。其实这里我们可以在PHP中做一些逻辑判断,比如判断Origin头是否huangjacky.com的请求,那么就设置Access-Control-Allow-Orgin为*,不就可以了么?代码如下:

1 <?php
2 $origin = $_SERVER['HTTP_ORIGIN'];
3 if(preg_match('/^http:\/\/\w+\.huangjacky\.com/i',$origin))
4     header("Access-Control-Allow-Origin: *");
5 echo"from b site";

具体其他的参数可以参考附录中的详细文档咯。

0x02 承

JSONP也是Web开发中针对跨域提出来一种方法,它不是新技术,反而是一些老技术的整合,这样在浏览器的兼容性上面做得不错。前面我们说到过script标签的src是可以跨域引用js,把js加载到自己的域中来执行。因此我们可以在引用js的同时提交一些参数,这样B站根据参数做出相应的操作后,将操作的结果写入到js文件中,并返回给A站点,这样A站点就得到了B站点的数据了。

第一框中function是A站在加载完B站数据后执行的函数。第二框是一个DOM中添加一个script标签。因此我们现在有必要看看B站后台是怎么实现的:

重点是要输出要确定Content-Type,然后就是拼凑javascript代码了。

是吧很简单的,在jQuery在$.ajax函数中将参数dataType设置成jsonp的话,就会按照这种原理来实现跨域,和XMLHttpRequest没有半毛钱的关系了。

0x03 转

从JSONP的原理来看的话,script标签只能GET方式。还有就是后台程序需要对callback参数进行有效性过滤,不然恶意用户可以插入攻击代码了。一般使用正则:

^[a-z0-9_]+$

来判断用户的回调函数名是否合法。

而JSONP中经常还会遇到一个问题就是JSON劫持,这是CSRF中的一种,常用的防御方式都是部署TOKEN。

0x04 附录

  1. https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
  2. http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/
  3. http://www.nowamagic.net/librarys/veda/detail/224

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx 科技中介服务机构想要提升服务效率,需要哪些数智工具支持? 立即下载

相关推荐

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

jsonp突破同源策略,实现跨域访问请求

跨域访问问题,相信大家都有遇到过。这是一个很棘手的问题。不过道高一尺,魔高一丈,对于这类问题,总有解决问题的方案。最近我又接触到了这个问题,解决的途径是ajax+jsonp。 说到这个问题,不得不说一下“同源策略(Same-Origin Policy)”,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源,就是必须协议、域名、端口都一致的,才叫做同源。例如:http://www.12306.cn和https://www.1230

崔成龙 . 勇往直前 8455

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

jsonp跨域原理,使用以及同源策略

什么是跨域请求,为什么用跨域 浏览器从一个域名的网页去请求另一个域名的资源时,域名,端口,协议任何一个不同,都算是跨域请求 域名是一个网站的唯一标识,一个域名代表着一个网站以及其对应的服务 服务间调用可以使用基于soa思想的rpc调用,也可以是webservice等等 那么从前端页面发起的调用,就会用到跨域 说跨域就必须先说浏览器的同源策略(SOP(same origin policy)...

zhangsir的博客 8251

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

Ansys Lumerical | 薄膜铌酸锂电光调制器的仿真与优化

本文详细介绍了使用Ansys Lumerical进行薄膜铌酸锂电光调制器仿真与优化的全流程。从基础原理到电学仿真、光学模拟技巧,再到设计优化实战经验,帮助工程师掌握这一先进光电器件的仿真方法。重点解析了薄膜铌酸锂的Pockels效应和Mach-Zehnder结构设计,并提供了常见问题排查指南和最新发展动态。

vulkan6gpu的博客 1199

如何理解web安全——同源策略

什么是同源策略?    浏览器同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行狡猾。    同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。只有同一个源的脚本赋予dom、读写cookie、session、ajax等操作的权限。url由协议、域名、端口和路径组成、如果两个url的协议、域名和端口相同,则这两个url是同源的。限制来源不用源的...

maggie_live的博客 8039

Kettle入门指南:从安装到数据转换实战

本文提供Kettle(Pentaho Data Integration)的完整入门指南,涵盖从Java环境安装、软件配置到核心概念(转换与作业)的详细解析。通过实战案例,手把手教你如何将文本文件数据导出到Excel,并连接MySQL数据库进行数据导入,帮助你快速掌握这一强大ETL工具的基本使用,实现高效数据搬运与转换。

weixin_29266647的博客 449

同源政策下使用JSONP实现跨域访问

1. 同源政策 1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。 最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页”同源”。所谓”同源”指的是”三个相同”。 即协议相同,域名相同、端口相同。 同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。 2. JSONP JSONP是服务器与客户端跨源通信的常

文景大大 506

Delta机器人:运动学正反解分析

Delta机器人:运动学正反解分析 一、Delta机构简介 Delta机构是并联机构中的一种典型机构,起原始结构如图1所示。Delta机构由R.Clavel 博士在 1985年发明,是现在并联机器人中使用最多的一种,具备了并联机构所特有的优点,负载能力强、效率高、末端执行器精度高、运动惯性小,可以高速稳定运动等。因此在机器人领域获得了越来越广泛的应用。以实现高速、精准、高效的运动。           &n

花洛兮灬 3万+

ESP32-P4实战:LVGL V9.4 PPA加速配置与性能对比

本文详细介绍了如何在ESP32-P4平台上配置LVGL V9.4的PPA硬件加速功能,通过启用PPA加速显著提升图形处理性能并降低CPU占用率。文章包含环境准备、配置步骤、性能对比及常见问题解决方案,帮助开发者高效利用ESP32-P4的PPA加速器优化嵌入式GUI应用。

rice5的博客 1191

JSONP的调用

原理 5.3.2 什么是jsonp? Jsonp其实就是一个跨域解决方案。Js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本可以得到此脚本。得到js脚本之后会立即执行。可以把数据做为参数传递到方法中。就可以获得数据。从而解决跨域问题。 5.3.3 jsonp的原理: 浏览器在js请求中,是允许通过scrip

青蛙的博客 1361

工业视觉中HDR算法的动态范围优化与Debevec/Mertens方法实践

本文深入探讨了工业视觉中HDR(高动态范围)成像技术,重点解析了Debevec和Mertens两种核心算法。针对工业场景中因动态范围不足导致的过曝与欠曝问题,文章详细对比了两种方法的原理、实现步骤、参数调优及适用场景,为工程师在静态检测与高速产线等不同需求下,选择并实践HDR算法提供了清晰的指导。

weixin_29099217的博客 193

jsonp详解

json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西。今天总算搞明白了。下面一步步来搞清楚jsonp是个什么玩意。 同源策略 首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。看起来不知道什么意思,实践一下就知道了。 1.随便建两个网页 ...

652

ArcGIS笔记2_如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系

本博文则主要讲解,如果我们手里拿到的shp文件是在ArcGIS中,如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系。

晏长街的博客 4万+

机械式激光雷达实现原理以及特性总结

本文介绍了机械式激光雷达的技术原理和核心特性。该技术通过机械旋转结构实现360°三维扫描,采用飞行时间法测距并生成点云数据。核心优势包括全向扫描、长距高精度和成熟度高,但存在体积大、成本高、可靠性受限等局限。典型应用于自动驾驶测试车、测绘建模等领域。与固态激光雷达相比,机械式在视场角和探测距离方面有优势,但在体积、成本和可靠性方面处于劣势。该技术目前主要应用于对成本不敏感的专业场景。

start_up_go的博客 262

web安全day48:session和cookie、同源策略的初步理解

请求头 HOST:用于指定被请求资源的Internet主机和端口号 user-agent:浏览器指纹 referer:当前页面的上一个页面,如果是直接访问,则此项为空 下面是一个get页面 GET /post.html HTTP/1.1 Host: 192.168.1.3 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,

小梁的博客 1672

Pointnet++改进90:2025最新改进模块-EVA模块

本教程提出了一种改进PointNet++特征提取模块的方法,通过在PointNetSetAbstraction模块中加入NAMAttention注意力机制,显著提升了模型性能。具体改进包括:1)新建eva.py文件,实现了包含SDLSKA、CKS等关键组件的EVA模块;2)在pointnet2_utils.py中添加Conv和PointNetSetAbstractionAttention类,整合注意力机制;3)修改pointnet2_sem_seg.py模型结构。这种改进方法降低了实现难度,同时保持了33F

AIcurator的博客 361
上一篇: 有关Chrome下锚点定位失效的问题
下一篇: vm 10 +centos6.3 安装
vm021
博客等级 码龄11年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值