浏览器安全

同源策略

什么是同源策略(Same Origin Policy)?

  • 浏览器的同源策略,限制了来自不同源的 document 或脚本之间的读取访问。

源的因素有很多种:域名与子域名、IP 地址、端口、协议。

src 属性资源文件的加载:

  • 需要注意的是,存放 JS 文件的域并不重要;重要的是 JS 文件加载的域。

  • 在浏览器中 <script><img><iframe><link> 等标签都可以被跨域加载资源,而不受同源策略的限制。

  • 这些带 src 属性的标签每次加载时,实际上是由浏览器发起了一次 GET 请求。

  • 不同于 XMLHttpRequest 的是:通过 src 属性加载的资源,浏览器限制了其权限(不能读写返回的内容)。

XMLHttpRequest 请求:

  • 如果 XMLHttpRequest 能够跨域访问资源,则可能会导致一些敏感资源的泄露。比如:CSRFtoken,从而导致发生安全问题。

  • 随着业务的发展,W3C 委员会制定了 XMLHttpRequest 跨域访问标准:它需要通过目标域返回的 HTTP 头来授权是否允许跨域访问。

    安全性基于:因为 HTTP 请求头一般是无法被 JS 控制的,所以认为这个方案是可以实施的。

对于浏览器来说,除了 DOMCookieXMLHttpRequest 会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。最常见的比如:FlashJava AppletSilverlightGoogle Gears 等都有自己同源策略。

浏览器沙箱

黑客圈子名词 挂马

  • 在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式。

浏览器的多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,也不会影响到其他的进程。

Google-Chrome 是第一个采取多进程架构的浏览器。它的主要进程分有:

  • 浏览器进程、渲染进程、插件进程(如 pdfjavaflash)、扩展进程。

沙箱的应用范围非常广泛。而对于浏览器来说,采用 SandBox 技术让不受信任的网页代码运行在一个受到限制的环境中,从而保护本地桌面系统的安全。

Google-Chrome 实现了一个相对完整的沙箱(官网):

../ChromeSandbox.png

恶意网址拦截

浏览器拦截恶意网址的功能都是基于 ”黑名单“ 的,如果用户上网时发信啊网址存在于黑名单中,浏览器会弹出一个 警告页面。

常见的恶意网址分为两类:

  1. 挂马网站,这些网站通常包含有恶意的脚本比如 Flash 或 JavaScript,通过利用浏览器的漏洞执行 shellcode 插入木马;
  2. 钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。

要识别恶意网站建立黑名单:

  • 需要许多基于页面的特征,而这些模型显然是不适合放在客户端的。攻击者会分析研究并绕过这些规则,而且收集用户访问的历史纪录也是一种侵犯隐私的行为。

  • 一些有实力的浏览器厂商会自建有安全团队对恶意网址进行识别,这份黑名单对于搜索引擎来说也是其核心竞争力之一。

  • PhishTank 是互联网上免费的提供恶意网址黑名单的组织之一,它由世界各地的志愿者提供。

  • Google 也公开了 SafeBrowsing API,任何组织或个人都可以在产品中接入。

除此之外,EV SSL 证书(Extended Validation SSL Certificate)可以进行白名单标识。