浏览器安全

206 阅读4分钟

浏览器安全分为web页面安全、浏览器系统安全和浏览器网络安全。

在没有安全保障的web世界中,我们是没有隐私的,因此需要安全策略来保障我们的隐私和数据的安全。最基础、最核心的安全策略是同源策略。

让不同的源之间绝对隔离,是最安全的,但是这样的话,使得我们的web项目难以开发和使用,为了使web项目灵活,出让了一些安全性,出让安全性带来了安全问题,最主要的是XSS攻击和CSRF攻击。

同源策略主要表现在DOM、WEB数据和网络三个层面:

  1. DOM层面,同源的页面可以操作DOM。例如,A页面中打开同源的B页面,在B页面中如下操作,使A页面内容看不见。
let doc = opener.document;
doc.body.style.display='none';
  1. 数据层面:同源可以操作Cookie、LocalStorage、IndexDB。
  2. 网络层面:同源策略限制了通过XMLHttpRequest等方式将站点的数据发送给不同源的站点。

目前的页面安全策略有三个特点:

  1. 页面中可以引入第三方资源,不过这也暴露了很多诸如XSS的安全问题,因此又在这种开发的基础上引入了CSP(Content-Security-Policy)来限制其自由度。
  2. 使用XMLHttpRequest和fetch都是无法直接进行跨域请求的,因此浏览器又在这种严格策略的基础上引入了跨域资源共享CORS(可以查看我的另外一篇《跨域解决方案--资源共享CORS学习笔记》。)
  3. 两个不同源的DOM是不能互相操作的,因此浏览器又实现了跨文档消息机制,让其可以比较安全的通信。(window.postMessage())

Web页面安全

XSS攻击(Cross Site Scripting)

XSS攻击的分类

主要有存储型XSS攻击、反射型XSS和基于DOM的XSS攻击三种方式来注入恶意脚本。

存储型XSS攻击和反射型XSS的区别在于服务器不会存储反射型XSS攻击的恶意脚本。

如何阻止XSS攻击?

  1. 服务器对输入脚本过滤或转码
  2. 充分利用CSP
  3. Cookie使用HttpOnly属性

CSRF攻击(Cross-site request forgrey)

CSRF攻击,就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。

CSRF攻击的方式

通常当用户点击了黑客的链接,打开黑客的页面之后,黑客有三种方式发起CSRF攻击:

  1. 自动发起GET请求
  2. 自动发起POST请求
  3. 引诱用户点击链接

和XSS攻击不同的是,CSRF攻击不需要将恶意代码注入到用户的页面中,仅仅是使用服务器的漏洞和用户的登录状态来实施攻击。

如何防范CSRF攻击?

CSRF攻击的三个必要条件:

  1. 服务器有CSRF漏洞
  2. 用户登录过目标站点,并在浏览器上保持该站点的登录状态。
  3. 需要用户打开一个第三方站点

CSRF的防范:

  1. 充分利用Cookie的SameSIte属性
  2. 利用请求头中的Referer和Origin字段验证请求的来源站点
  3. CSRF Token

浏览器系统安全--安全沙箱

浏览器网络安全--https

https并非是一个新的协议,通常http是直接和TCP通信,而https则是添加了一层安全层进行通信,然后安全层再和TCP通信。

https协议的核心在于安全层,它不会影响上面的的http协议,也不会影响下面的tcp/ip协议。

总的来说,安全层有2个主要职责:对发起http请求的数据进行加密操作和对接收到的http内容进行解密操作。

https中的安全层采用的加密方式是对称加密和非对称加密搭配使用。

使用对称加密的密钥对传输内容进行加密,再使用非对称加密的公钥对对称加密的密钥进行加密。

添加数字证书,数字证书内含有公钥。