首页 > 其他分享 >你真的了解什么是跨域吗?

你真的了解什么是跨域吗?

时间:2024-08-29 22:24:20浏览次数:14  
标签:www 浏览器 跨域 了解 同源 真的 com 策略

跨域是每个程序员都躲不过的一个问题,无论是面试还是现实中的开发。既然如此我们就来详细讲解一下什么是跨域,该怎么解决这个跨域问题。

老规矩,先上定义,先从定义下手。

什么是跨域

定义:跨域,就是指浏览器不能执行其他网站的脚本。

那为什么会产生跨域这个问题呢?为什么不能再浏览器上执行其他网站的脚本呢?

这里就涉及到我们的浏览器的同源策略了,

那你可能又要问什么是同源策略?浏览器为什么要使用这个同源策略。不使用这个同源策略不就不会产生跨域这个问题了吗?不就没有那么多事情了吗?我们接下来就老好好解开这个疑问?

什么是同源策略

定义:同源策略是一个重要的安全策略,它可以限制一个来源,或者它的脚本的另一个来源,可以与另一个资源进行有效的合作。可以帮助阻止间接文档,减少可能被攻击的文档。

怎么样的才是同源

定义:如果 URL 的协议端口(en-US)(如果有指定的话)和主机都一样的话,那么两个 URL 是同一个端口。方案也被称为“组协议/主机/元元”,或者直接是“元组”。

其中,源=协议+主机+端口,只有这三个要素相同,两个源才相同,称之为同源,如果两个源不同,则称之为跨源或跨域。

示例:

与 URLhttp://store.company.com/dir/page.html的源对比的示例:

网址结果原因
http://store.company.com/dir2/other.html同源只是路径不同
http://store.company.com/dir/inner/another.html同源只是路径不同
https://store.company.com/secure.html失败不同协议
http://store.company.com:81/dir/etc.html失败端口不同(http://默认端口为 80)
http://news.company.com/dir/other.html失败主机不同

那浏览器为什么要使用同源策略呢?

如果我们对浏览器为什么要使用同源策略有疑问,我们不妨反过来思考。如果没有同源策略会怎么样呢?

没有同源策略限制的两大危险场景

据我了解,浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询。试想一下没有这样的限制上述两种动作有什么危险。

没有同源策略限制的接口请求

cookie大家应该知道,一般用来处理登录等场景,目的是让服务端知道谁发出的这次请求。如果你请求了接口进行登录,服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中,服务端就能知道这个用户已经登录过了。知道这个之后,我们来看场景: 1.你准备去清空你的购物车,于是打开了买买买网站www.maimaimai.com,登录成功, 2.你在看有什么东西买的过程中,你的好基友发给你一个链接www.nidongde.com,一脸yin笑地跟你说:“你懂的”,你毫不犹豫打开了。 3.你饶有兴致地浏览着www.nidongde.com,谁知这个网站暗地里利用浏览器的安全漏洞来进行黑客行为,盗取你的钱!由于没有同源策略的限制,它向www.maimaimai.com发起了请求!聪明的你一定想到上面的话“服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中”,这样一来,这个不法网站就相当于登录了你的账号,可以为所欲为了!如果这不是一个买买买账号,而是你的银行账号,那就更危险了…… 这就是传说中的CSRF攻击浅谈CSRF攻击方式。 看了这波CSRF攻击我在想,即使有了同源策略限制,但cookie是明文的,还不是一样能拿下来。于是我看了一些cookie相关的文章。知道了服务端可以设置httpOnly,使得前端无法操作cookie,如果没有这样的设置,像XSS攻击就可以去获取到cookieWeb安全测试之XSS;设置secure,则保证在https的加密通信中传输以防截获。

没有同源策略限制的Dom查询

我们来看场景:
1.有一天你刚睡醒,收到一封邮件,说是你的银行账号有风险,赶紧点进www.yinghang.com改密码。你吓尿了,赶紧点进去,还是熟悉的银行登录界面,你果断输入你的账号密码,登录进去看看钱有没有少了。 2.睡眼朦胧的你没看清楚,平时访问的银行网站是www.yinhang.com,而现在访问的是www.yinghang.com,这个钓鱼网站做了什么呢?

// HTML
<iframe name="yinhang" src="www.yinhang.com"></iframe>
// JS
// 由于没有同源策略的限制,钓鱼网站可以直接拿到别的网站的Dom
const iframe = window.frames['yinhang']
const node = iframe.document.getElementById('你输入账号密码的Input')
console.log(`拿到了这个${node},我还拿不到你刚刚输入的账号密码吗`)

由此我们知道,同源策略确实能规避一些危险,不是说有了同源策略就安全,只是说同源策略是一种浏览器最基本的安全机制,毕竟能提高一点攻击的成本。其实没有刺不穿的盾,只是攻击的成本和攻击成功后获得的利益成不成正比!

那我们了解了那么多之后,我们应该要消除对浏览器的误解,同源策略是浏览器做的一件好事,是用来防御来自邪门歪道的攻击,但总不能为了不让坏人进门而把全部人都拒之门外吧。没错,我们这种正人君子只要打开方式正确,就应该可以跨域。那解决跨域也有哪几种方法呢?

解决跨域的办法

  1. JSONP
    在HTML标签里,一些标签比如script、img这样的获取资源的标签是没有跨域限制的,利用这一点,我们可以这样干:

标签:www,浏览器,跨域,了解,同源,真的,com,策略
From: https://blog.csdn.net/weixin_45215308/article/details/126920367

相关文章

  • Foxmail超大附件启动不了解决方法
    之前添加了几次QQ邮箱的账号密码,显示账号密码错误,无法启动。以为是我输错了呢,换了几个账号密码也不行。在网上搜索许久终于找到了解决办法。解决方案如下:1、先禁用腾讯企业邮箱超大附件插件功能。 2、删除foxmail安装目录下的domain文件,此文件所在位置:Foxmail7.2\Global\doma......
  • Faiss了解
    Faiss是什么Faiss全称Facebook AISimilarity Search,是Facebook AI团队开源的相似性搜索工具,或者称为向量数据库。它是面向稠密向量高效的相似性检索以及聚类引擎,可实现在十亿级数据集上创建毫秒级的最邻近搜索(nearestneighborsearch)。Faiss用C++编写,并支持Python接口。除......
  • 13个你需要了解的重要页面SEO因素
    页面SEO是微调各种网站组件,以帮助搜索引擎抓取、理解和为相关查询排名页面。虽然页面外因素如反向链接和品牌信号至关重要,但优化页面元素为最大化搜索可见性奠定了基础。除了内容本身,页面因素还表明了页面的相关性和质量。网站架构包括站点速度、移动设备友好性和URL结构,对页......
  • AI - 一文了解AIOps的含义、特点与功用
    AIOps定义AIOps是智能运维(ArtificialIntelligenceforITOperations)的英文缩写。当今,专业厂商根据自身理解和商业目的,分别给出了各具特色的AIOps定义。主要关键字:IT运维、人工智能(AI)、机器学习(ML)、自然语言处理(NLP)、大数据、数据分析、运营效率等以下是来自Elastic、IBM......
  • 25 届秋招真的回暖了?说这句话的都是哪些人
    大家好,我是程序员鱼皮。最近在网上看到了不少说25届秋招回暖的帖子,比如下面这个:看到这种帖子,我从来都是抱有质疑态度的,因为现在互联网信息失真太严重了,很多信息都是主观发布的,缺少客观事实依据。如果你在网上搜索一下,看到更多的应该是下面这种帖子:评论区:回暖?回暖个P!我们......
  • Datawhale AI夏令营 Task 1 《深度学习详解》 - 1.1 通过案例了解机器学习的学
        一、学习目标通过具体案例深入理解机器学习的概念、工作原理以及在实际应用中的作用。二、主要内容案例介绍:详细阐述了图像识别、语音识别、自然语言处理等领域的具体案例,如人脸识别系统、智能语音助手、文本......
  • Datawhale X 李宏毅苹果书 AI夏令营:task1通过案例了解机器学习
    隐藏任务:①:找出本篇中形如回归(regression)加粗字体的术语,并用自己的话进行解释,列成表格,与学习群的其他小伙伴讨论你的理解和搜索到的相关案例。②:整理出本篇中所有的公式,手动摘录,并尝试理解。③:找出机器学习找函数的3个步骤!并查找资料,交叉佐证这些步骤。④:归纳梯度下降的步骤。......
  • 大模型深度解析:全面了解与精通的必备知识,一篇涵盖所有要点
    大模型的定义大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。大模......
  • 一文详细了解初学者怎么入门大语言模型(LLM)?
    关于如何入门LLM,大多数回答都提到了调用API、训练微调和应用。但是大模型更新迭代太快,这个月发布的大模型打榜成功,仅仅过了一个月就被其他模型超越。训练微调也已经不是难事,有大量开源的微调框架(llamafactory、firefly等),你只要懂部署,配置几个参数就能启动训练。甚至现在有大......
  • 第2章-09-浏览器同源策略及跨域
    ......