浏览器的网络安全

1、同源策略

1.1、什么是

一个 URL 有三部分组成:协议、域名(指向主机)、端口,只有这三个完全相同的 URL 才能称之为同源。同源策略控制不同源之间的交互,例如在使用XMLHttpRequest 时则会受到同源策略的约束。

1.2、如何跨域访问

  • script标签嵌入跨域脚本 <script src="..."></script>
  • link标签嵌入跨域CSS <link rel="stylesheet" href="...">
  • 通过<img>标签展示的图片。
  • 通过 videoaudio播放的多媒体资源。
  • 通过 @font-face 引入的字体。
  • 通过 iframe 载入的任何资源。
  • 可以通过设置 document.domain,让子域名和父域名通过同源策略的检测。
// 例如:子域名下面的页面 http://store.company.com/dir/other.html

document.domain = "company.com"; // 脚本代码中修改
fetch("http://company.com/dir/page.html") // 再去访问父域名下面的页面,可以不被跨域拦截
跨域访问的解决方案:
  • CORS:跨域资源共享,是HTTP的一部分,它允许服务端来指定哪些主机可以从这个服务端加载资源。
  • JSONP
  • Nginx代理

1.3、跨源数据存储访问

访问存储在浏览器中的数据,如 localStorageIndexedDB,是以源进行分割。每个源都拥有自己单独的存储空间,一个源中的 JavaScript 脚本不能对属于其它源的数据进行读写操作。

Cookies 使用不同的源定义方式。一个页面可以为本域和其父域设置 cookie,只要是父域不是公共后缀(public suffix)即可。

// 服务端返回的 Access-Control-Allow-Origin 响应头字段进行控制
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: https://foo.example

2、XSS攻击

2.1、什么是

XSS:跨站脚本,但重点不在于跨站点,而是在于脚本的执行。

XSS是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

常见的XSS攻击有三种:

  • 反射型XSS攻击:

    • 通过特定手法,诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。
    • 此类XSS攻击通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗。
  • DOM-based型XSS攻击:

    • 客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从URL中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的JavaScript脚本,而这些脚本没有经过适当的过滤或者消毒,那么应用程序就可能受到DOM-based型XSS攻击。
    • 需要特别注意以下的用户输入源document.URL、location.hash、location.search、document.referrer等。
  • 存储型XSS攻击:

    • 攻击者事先将恶意代码上传或者储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
    • 这意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此存储型XSS攻击的危害会更大。
    • 此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

2.2、防御

  • 服务器对输入脚本进行过滤或转码
  • 充分利用 CSP;
    • 启用:通过 HTTP 头信息的 Content-Security-Policy字段,或通过meta标签;
    • 限制加载其他域下的资源文件,禁止向第三方域提交数据,禁止执行内联脚本和未授权的脚本;
  • 使用 HttpOnly 属性;
  • 通过使用 HttpOnly 属性来保护 Cookie 的安全,无法通过 JavaScript 来读取这段 Cookie。

3、CSRF攻击

3.1、什么是

Cross-site request forgery,跨站点请求伪造,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。

CSRF攻击攻击原理及过程如下:

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

3.2、如何检测

最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

3.3、防御CSRF攻击:

目前防御 CSRF 攻击主要有三种策略:

  • 验证 HTTP Referer 字段;
    • 在浏览器发起请求时,Referer记录了该 HTTP 请求的来源地址。
    • 但有些API服务本身不需要在浏览器发起,且有些浏览器可被篡改,或支持用户设置请求时不发送referer。
  • 在请求地址中添加 token 并验证;
    • 在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token。
    • 缺点是难以保证 token 本身的安全。
  • 在 HTTP 头中自定义属性并验证;
    • 这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。
    • 这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起。

4、安全沙箱

安全沙箱如何影响到各个模块功能的呢?

  1. 持久存储
  2. 网络访问
  3. 用户交互

站点隔离(Site Isolation)

所谓站点隔离是指 Chrome 将同一站点(包含了相同根域名和相同协议的地址)中相互关联的页面放到同一个渲染进程中执行。

由于最初都是按照标签页来划分渲染进程的,所以如果一个标签页里面有多个不同源的 iframe,那么这些 iframe 也会被分配到同一个渲染进程中,这样就很容易让黑客通过 iframe 来攻击当前渲染进程。而站点隔离会将不同源的 iframe 分配到不同的渲染进程中,这样即使黑客攻击恶意 iframe 的渲染进程,也不会影响到其他渲染进程的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值