浏览器安全学习

浏览器特性

  1. 会将一些特殊符号当做字母进行解析,此时一个符号可能会被解析成两个到三个字母,这样子如果有漏洞对输入做了限制,黑客就可以利用这个特性来绕过某些漏洞中长度限制。
  2. 某些特殊字符或者其他国家的文字和某些字母的形状一模一样,也有可能会被黑客用来伪造域名。不过现在已经不支持其他国家的文字和英文在一起来注册域名了。
  3. 浏览器的输入框可以直接输入账号密码登录服务器,此时可以构造特殊的账号密码,来迷惑用户让其以为自己访问正确的网站,例如 http://qq.com:80@evil.com,用户可能以为自己访问的是 qq,其实访问的是 evil.com。常见的浏览器基本都会隐藏登录信息,所以基本没啥影响。

如果没有同源策略会有什么后果

  1. 用户在 A 网页的数据,可以被 B 网页随意读取,例如可以B 网页可以读取 A 网页的 cookie 等。B 网页读取数据后可以模拟 A 网页上的用户对 A 网页执行任何操作,例如转账。
  2. 页面 B 可以直接像用户一样操作直接A页面

伪协议

伪协议分为浏览器伪协议和例如 php 伪协议的语言伪协议,PHP 伪协议是一种在 PHP 中使用的特殊协议,它们允许开发者访问 PHP 的内部功能或资源。

浏览器伪协议

浏览器伪协议通常是浏览器直接处理,不需要服务端参与,伪协议会控制浏览器执行一些操作,例如 :

  1. tel 伪协议可以让浏览器调用当前设备上的打电话的应用进行打电话,在 mac 上,此协议可以调出 facetime 进行打电话。
  2. mailto:example@example.com伪协议可以让浏览器打开设备上的发送邮件的程序,并给example@example.com这个用户编辑一封邮件。
  3. data:image/png;base64,iVBORw0KGg…伪协议会更新浏览器当前页面,并显示对应的数据,举例如下
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48IS0tIEZvbnQgQXdlc29tZSBQcm8gNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlIChDb21tZXJjaWFsIExpY2Vuc2UpIC0tPjxwYXRoIGQ9Ik01MDUgNDQyLjdMNDA1LjMgMzQzYy00LjUtNC41LTEwLjYtNy0xNy03SDM3MmMyNy42LTM1LjMgNDQtNzkuNyA0NC0xMjhDNDE2IDkzLjEgMzIyLjkgMCAyMDggMFMwIDkzLjEgMCAyMDhzOTMuMSAyMDggMjA4IDIwOGM0OC4zIDAgOTIuNy0xNi40IDEyOC00NHYxNi4zYzAgNi40IDIuNSAxMi41IDcgMTdsOTkuNyA5OS43YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDI4LjMtMjguM2M5LjQtOS40IDkuNC0yNC42LjEtMzR6TTIwOCAzMzZjLTcwLjcgMC0xMjgtNTcuMi0xMjgtMTI4IDAtNzAuNyA1Ny4yLTEyOCAxMjgtMTI4IDcwLjcgMCAxMjggNTcuMiAxMjggMTI4IDAgNzAuNy01Ny4yIDEyOC0xMjggMTI4eiIvPjwvc3ZnPg==
  1. javascript 伪协议,会在当前页面执行 js 代码,例如javascript:alert(document.cookie)
  2. about 伪协议,调用浏览器一些内部功能,例如 about:blank 是显示一个空白网页,但是域和打开它的时候所在页面的域一样。

浏览器的导航过程

导航是指浏览器定位到某个资源的过程。简单来讲步骤如下:

  1. 用户在导航栏中输入 url
  2. 浏览器使用 dns 服务解析出 目标的 ip 端口等信息,并和目标建立连接
  3. 下载目标返回的资源
  4. 将资源交给 html 解析器去解析成 dom 树
  5. 运行dom 中的 js 代码,js 代码可能会对 dom 树进行改变
  6. 此时运行浏览器自己的过滤器,例如 xss 过滤器(不好用,现在已经废弃)等
  7. 将最终的结果展现给用户

使用 windows.open 打开网页的特点

window.open(“https://www.baidu.com”);打开百度的时候,刚开始先打开的是about:blank,等 baidu 页面被渲染完成后,才会将地址栏中的 url 和网页内容显示出来。不过在显示出来前,about:blank 可以被创造它的页面完全控制,因为此时创造 about:blank 页面的页面和 about:blank 页面是同源的。

之前一些老的浏览器,会在显示 about:blank 页面的时候,地址栏先显示目标网站的 url(正确情况下应该在地址栏先显示 about:blank),等页面加载成功后再将正确的页面显示出来,此时的页面本质上还是 about:blank。

此时如果黑客可以利用某种技术,中断浏览器对正确页面的解析,让此页面继续保持在 about:blank 状态下,就可以完全控制这个页面。此时页面本质上还是 about:blank, url 是目标网站 url,但是内容却能被黑客完全控制,黑客可以通过控制 dom 树来伪造无比逼真的页面,现在已经无法利用。

为什么window.open()不直接打开目标页面而是先显示一个 about:blank 页面

  1. 浏览器访问目标 url 是需要一定时间的,此时如果弹出一个 about:blank 页面可以让用户知道浏览器正在执行操作,用户不会觉得浏览器稍微卡了一下,这样子的话用户体验会更好。
  2. 无论 window.open 是否被提供了正确的 url,浏览器都回打开新的页面,这样保持了结果的一致性,用户体验更好。
  3. 先创建窗口,再加载资源是浏览器的默认流程。
  4. 因为浏览器要对资源进行同源策略的判断,所以不能立刻加载目标url 返回的数据。此时又必须创建新的页面来反馈用户让用户知道浏览器确实在准备加载资源,所以浏览器需要先弹出一个页面,这个页面中的资源在弹出的时候就必须符合同源策略。此时 about:blank 页面就满足这个要求。当目标的 url 解析完毕后,会替换 about:blank 中的内容。

总得来说就是为了安全性和用户的体验更加流畅。

csp内容安全策略

作用是限制当前页面可以加载什么资源,不能加载什么资源。下面是 csp 的策略和策略值。

指令描述
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">default-src</font>指定默认的资源来源策略,适用于所有未明确指定的资源类型
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">script-src</font>指定允许加载和执行的JavaScript资源来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">style-src</font>指定允许加载的CSS资源来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">img-src</font>指定允许加载的图像资源来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">connect-src</font>指定允许发起网络请求的来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">font-src</font>指定允许加载的字体资源来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">object-src</font>指定允许加载的对象资源(如插件、Flash等)来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">media-src</font>指定允许加载的媒体资源(如音频、视频)来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">frame-src</font>指定允许嵌入的框架(如iframe)来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">worker-src</font>指定允许加载的Web Worker脚本来源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">base-uri</font>指定允许的文档基础URL
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">form-action</font>指定允许的表单提交URL
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">frame-ancestors</font>指定允许嵌入当前页面的框架来源
策略值含义
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'self'</font>允许资源从当前域加载
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'unsafe-inline'</font>允许内联脚本和样式
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'unsafe-eval'</font>允许使用<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">eval()</font>
函数和<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">new Function()</font>
构造函数
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'none'</font>不允许加载任何资源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'sha256-<hash>'</font>允许加载具有指定SHA-256哈希值的资源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'sha384-<hash>'</font>允许加载具有指定SHA-384哈希值的资源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'sha512-<hash>'</font>允许加载具有指定SHA-512哈希值的资源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">'nonce-<random-value>'</font>允许加载具有指定随机nonce值的资源
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">https:'</font>允许资源从HTTPS协议加载
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">http:'</font>允许资源从HTTP协议加载(不推荐,存在安全风险)
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">data:'</font>允许资源从<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">data:</font>
URI加载
<font style="color:rgba(0, 0, 0, 0.6);background-color:rgb(248, 248, 248);">blob:'</font>允许资源从Blob URL加载

通过控制台执行 js 脚本,这种方式是内敛脚本执行,script-src ‘self’;规则会阻止这样的脚本执行。只有同源网站上的.js 文件才能在这个页面上执行。

绕过csp:MIME sniff

假设服务器设置了 csp,只允许执行同源的脚本,但是服务器没有对自己的文件设置正确的 mime 类型,当浏览器请求这个资源的时候会猜测这个资源是什么,猜测的依据是资源的内容。

此时我们可以上传一个图片,这个图片是经过精心构造的,内部有我们的 js 脚本代码。然后在网页上插入一段 html 代码,具体是插入 img 标签,并用 img 标签的 src 属性调用这个图片,此时即可执行图片中融合的 js 代码。因为此时浏览器会将这个图片的 mime 属性识别成octec-stream 或者 script,而不是 image。

如果服务器设置了正确的 mime 类型,则无法通过这种方式绕过 csp。

CORS 跨域资源共享

本质是一种机制,可以让不同的域之间进行资源访问。实现方式是添加几种http 头,通过发送一个options请求,确认目标域是否允许跨域访问。如果允许的话,当前域就可以访问目标域了。

浏览器插件带来的安全问题

  1. 机器上已经安装的某些插件可能有任意代码执行漏洞,此时构造一个 xss 漏洞或者给受害者发送一封含有 xss 漏洞链接的邮件,当受害者点击链接时即可触发漏洞。
  2. 利用 xss 来利用浏览器自身的漏洞去静默安装一个含有 rce 漏洞的合法公开插件,然后利用这个插件漏洞达到代码执行的目的。
  3. 直接安装一个有漏洞的插件,然后用另一个程序和这个插件通信,进而获取浏览器中的数据。

不过现在新版本浏览器已经很难在不被发现的前提下安装插件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年AI免费大战:从DeepSeek到GPT-5的商业逻辑与行业变革

引言&#xff1a;人工智能行业的2025年重大转折 2025年伊始&#xff0c;人工智能行业的竞争格局发生了深刻变化&#xff0c;尤其是以DeepSeek为代表的新兴力量&#xff0c;通过低成本开源策略迅速崛起&#xff0c;迫使OpenAI、百度文心一言等人工智能巨头纷纷调整策略&#xf…

Word写论文常用操作的参考文章

1.插入多个引用文献&#xff1a;word中交叉引用多篇参考文献格式[1-2]操作以及显示错误问题 更改左域名&#xff0c;输入 \#"[0" 更改右域名&#xff0c;输入 \#"0]" 2.插入题注&#xff1a;word 中添加图片题注、目录、内部链接 3.插入公式编号&#x…

国产化替代大势所趋,ARM工控机的未来之路

在全球技术竞争加剧和国家政策推动的背景下&#xff0c;中国正在经历一场前所未有的国产化替代浪潮。在这个过程中&#xff0c;基于ARM架构的工业控制计算机&#xff08;简称ARM工控机&#xff09;迎来了前所未有的发展机遇&#xff0c;同时也面临着诸多挑战。 机遇 技术创新驱…

uniapp商城之登录模块

文章目录 一、小程序快捷登录1.定义接口2.获取登录凭证 code3.获取手机号并登录 二、模拟快捷登录1.封装模拟登录API2.调用模拟登录 三、保存登录信息1.类型声明2.状态管理3.成功提示并跳转页面 一、小程序快捷登录 1.定义接口 2.获取登录凭证 code 3.获取手机号并登录 注意&a…

C++-----------酒店客房管理系统

酒店客房管理系统 要求&#xff1a; 1.客房信息管理:包括客房的编号、类型、价格、状态等信息的录入和修改; 2.顾客信息管理:包括顾客的基本信息、预订信息等的管理; 3.客房预订:客户可以根据需要进行客房的预订&#xff0c;系统会自动判断客房的可用情况; 4.入住管理:客户入住…

电动汽车电池监测平台系统设计(论文+源码+图纸)

1总体设计 本次基于单片机的电池监测平台系统设计&#xff0c;其整个系统架构如图2.1所示&#xff0c;其采用STC89C52单片机作为控制器&#xff0c;结合ACS712电流传感器、TLC1543模数转换器、LCD液晶、DS18B20温度传感器构成整个系统&#xff0c;在功能上可以实现电压、电流、…

2025年02月11日Github流行趋势

项目名称&#xff1a;unsloth 项目地址url&#xff1a;https://github.com/unslothai/unsloth项目语言&#xff1a;Python历史star数&#xff1a;27175今日star数&#xff1a;1024项目维护者&#xff1a;danielhanchen, shimmyshimmer, Erland366, Datta0, xyangk项目简介&…

[qt5学习笔记]用vs2022(msvc2017)+copilot进行QtWidgetsApplication源码解析

一直没深入了解qt&#xff0c;又一段时间没写qt&#xff0c;重新捡起来。 开发环境 本地vs2022(msvc2017, v14.30)先升级到最新版本&#xff0c;方便使用copilot。 参考 VS2022QT5环境搭建 下载 qt5.14.2 用vs的qt插件设置qt5.14.2x86路径&#xff0c;x64版本未安装。 创建一…

家里装修想用投影仪,如何选择?装修中应该注意什么?

越来越多的业主在装修的时候抛弃了传统的电视&#xff0c;采用投影仪。 和这些业主聊天&#xff0c;选用投影仪有两个目的&#xff0c;第1是把电视机拿掉&#xff0c;这样能让家里的小朋友不看电视&#xff0c;保护小朋友的眼睛。 第2是选用投影仪&#xff0c;幕布都会装的比较…

javaEE初阶————多线程初阶(4)

8.1 单例模式 这又是什么新的神奇玩意呢&#xff0c;我们先不谈单例模式&#xff0c;先来谈谈设计模式&#xff0c;什么是设计模式呢&#xff0c;我们只需要用设计模式就好了&#xff0c;而大佬们考虑的就多了&#xff0c;这些设计模式就像棋谱&#xff0c;只要按照棋谱来下&am…

能源物联网数据采集网关 多协议对接解决方案

安科瑞刘鸿鹏 摘要 随着配电系统智能化需求的提升&#xff0c;现代配电物联网&#xff08;IoT&#xff09;系统对数据采集、传输、处理及远程管理能力提出了更高要求。智能网关作为连接现场设备与上层管理平台的核心枢纽&#xff0c;其性能直接影响系统的实时性、可靠性与扩展…

Node.js 中的 Event 模块详解

Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式&#xff0c;允许对象&#xff08;称为“事件发射器”&#xff09;发布事件&#xff0c;而其他对象&#xff08;称为“事件监听器”&#xff09;可以订阅并响应这些事件。这种模式非常适合处理异步操作和…

Unity开发抖音小游戏播放视频

Unity开发抖音小游戏播放视频 介绍抖音小程序ios端视频无法播放RenderTexture问题总结 介绍 最近在做抖音小游戏播放视频&#xff0c;这里我使用的是Unity原生的VideoPlayer组件来播放视频&#xff0c;这里总结了一下我相关的报错以及能够正常播放视频的代码。如果还不知道怎么…

网络安全抑制 缓解 根除 恢复 网络安全如何解决

一、网络安全 网络是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 二、如何防范网络安全问题 1、防范网络病毒。 2、配置防火墙。 3、采…

自有证书的rancher集群使用rke部署k8s集群异常

rancher使用自签域名&#xff0c;或者商业证书容易踩到的坑。 最开始的报错&#xff1a; docker logs kubelet‘s id E0214 13:04:14.590268 9614 pod_workers.go:1300] "Error syncing pod, skipping" err"failed to \"StartContainer\" for …

开源的轻量级分布式文件系统FastDFS

FastDFS 是一个开源的轻量级分布式文件系统&#xff0c;专为高性能的分布式文件存储设计&#xff0c;主要用于解决海量文件的存储、同步和访问问题。它特别适合以中小文件&#xff08;如图片、视频等&#xff09;为载体的在线服务&#xff0c;例如相册网站、视频网站等。 FastD…

Github 2025-02-12 C开源项目日报 Top7

根据Github Trendings的统计,今日(2025-02-12统计)共有7个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目7Python项目2OpenSSL - 强大的开源加密工具包 创建周期:4012 天开发语言:C协议类型:Apache License 2.0Star数量:23449 个Fork数量:10…

深入浅出:Python 中的异步编程与协程

引言 大家好&#xff0c;今天我们来聊聊 异步编程 和 协程&#xff0c;这是近年来编程语言领域中的热点话题之一&#xff0c;尤其在 Python 中&#xff0c;它作为一种全新的编程模型&#xff0c;已经成为处理 IO密集型 任务的强力工具。尽管很多人对异步编程望而却步&#xff0…

高级 Conda 使用:环境导出、共享与优化

1. 引言 在 Conda 的基础包管理功能中&#xff0c;我们了解了如何安装、更新和卸载包。但对于开发者来说&#xff0c;如何更好地管理环境、导出环境配置、共享环境&#xff0c;以及如何优化 Conda 的使用效率&#xff0c;才是提高工作效率的关键。本篇博客将进一步深入 Conda …

三十一、micro-app踩坑

版本:0.8.6 1.子应用单独运行正常,基座加载子应用后接口404 原因:子应用请求的接口为相对地址,会以基座域名进行补全,导致报错。 解决方法: