前几篇文章梳理了浏览器中的网络、进程视角和线程视角下的渲染,这篇文章将整理一下浏览器中涉及到的安全知识
本文主要从安全视角分析展开分析各视角下的常用攻击手段及应对策略
浏览器的特点就是开放,通过同一的浏览入口(浏览器应用)可以访问任何资源服务,开放的最大特点使任何资源都可以接入其中,通过互联网我们访问任何站点的资源,甚者可以加载并且执行其他网站的脚本,图片,音视频及下载资源等
通常用户使用浏览器访问互联网资源的环境如下图:
对于浏览器用户来说,访问网络资源只需要一台个人终端,终端有可运行浏览器的操作系统、浏览器应用、连通互联网,互联网连接可用的服务,这便是整体运行环境,其中任何环节被攻击都有可能带来安全问题,根据上诉描述,从微观到宏观、从局部到整体来对安全分类
在了解web页面安全之前,我们先来了解什么是浏览器的同源策略,浏览器权衡同源策略而带来的两种攻击方式
同源的定义,url协议、端口、域名完全完全相同称为同源站点,来看nodejs文档内的一张经典图形,origin
属性包括rotocol
和host
,不包括username
或password
。浏览器默认相同源之间是可以相互访问资源和操作 DOM 的,两个不同源的站点若想相互访问或者操作DOM,就要有安全策略的制约,这种策略称为同源策略。
同源的安全策略限制主要从以下几个方面考虑
opener
就是指向父页面的window对象。例如:从文章列表,点击任何一篇文章,新标签打开页面,我们会发现两个页面是同源的,origin都为https://cloud.tencent.com,则可以在新打开的标签页面中使用opener操作文章列表页面的window的对象,可以对父页面的document进行增删改操作。
"https://www.xxxx.cn" from accessing a cross-origin frame.
例如:打开百度首页,然后点击菜单学术(https://xueshu.baidu.com/),可以观察两个页面仍然是同一个站点,都是baidu.com域名下的子站点,但是却不满足同源策略,我们在子页面中使用opener来操作副页面的dom
同源策略对dom层面的限制,使用opener可以让同源站点之间相互操作,opener既是父页面的window对象,可知对于父页面的cookie,localstorage等也可以通过opener来访问
同理,不同源的站点对于数据的访问是有限制的
对于网络层面的限制应该是前端开发同学遇到频率最高的,当异步请求不同源服务或者通过代理访问时,常会遇到如下图的错误。
这是由于同源策略限制了通过XMLHttpRequest和Fetch等方式将站点数据发送不同源站点,跨域站点之间访问,必须通过某种协商机制来确认相互访问的信任。例如使用服务端反向代理或者请求头的控制。
跨站资源的引入放开(CDN)
同源策略限制了所有的资源都来自于同一个源,也就是html、js、css、图片等都必须部署在同一域下,但这违背了web的开放特性,由于cdn的出现,有很多基础js库,ui组件库(例如:jquery,vue,react,bootstrab,elementui,antdui等)都是使用cdn方式引入,对于同一个站点的图片、音视频、字体等资源也会cdn的方式同一管理,既提高了访问速度又提升了用户的体验。
同源策略对页面的资源引用放开,让其可以任意引入外部文件,对于便利性的考虑也会带来安全风险,黑客也正是利用了这点便利制造了XSS(跨站脚本攻击)
xss攻击是黑客往html/dom中注入恶意脚本,在用户浏览页面时进行如下恶意行为:
那么黑客是怎么利用脚本窃取数据的呢?
下图为存储型xss攻击的原理
存储型XSS的攻击说明:
下图为反射型XSS的攻击原理
反射型XSS攻击过程:
通过以上方式,将恶意脚本注入到了用户可访问的范围,恶意脚本便可以为所欲为。从原理图也可以看出,反射型XSS攻击和存储型XSS攻击的不同之处是 资源服务器不会存储恶意脚本,而是通过请求链路服务器过滤考虑不周全的漏洞原样返回了攻击脚本。
下图为DOM型XSS的攻击原理
这种劫持通常是通过路由器,或者本地的恶意软件来劫持页面,此攻击手段的特点是发生资源传输过程中的劫持篡改,不涉及到资源服务器
存储型XSS攻击和反射型XSS攻击都是利用web服务器的漏洞,而DOM型式是在传输过程中篡改页面,无论是何种类型,它们的共同的特点是往浏览器页面中注入恶意脚本,然后通过恶意脚本将用户信息发送至黑客部署的服务器,所以要阻止XSS攻击,通过阻止恶意js脚本注入和恶意消息上报来入手
CSRF攻击(Cross Site Request Forgery):跨站请求伪造,是指黑客引诱用户打开黑客的网址,在黑客的网站中获取用户的登陆态利用第三方站点做信息获取篡改等操作。
和XSS不同,CSRF攻击不需要注入恶意代码到用户界面,主要是利用服务器逻辑处理漏洞,利用有效的链接构造恶意的行为。
CSRF攻击的必要条件:
黑客利用浏览器中保存的登陆态、服务端漏洞,诱导客户点击第三方站点伪造的请求,实现恶意操作
知道了CSRF攻击的必要条件:登陆态和服务端逻辑漏洞的利用,所以防范措施也从这两点入手:
未完,后续浏览器稳定性视角和网络视角分析。。。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。