第二章 浏览器安全
2.1 同源策略
浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。
影响源的因素有:host(域名或IP地址)、子域名、端口、协议。
需要注意的是,对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。
在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带”src“属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的事,通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。
但是XMLHttpRequest收到同源策略的约束,不能跨域访问资源。
互联网是开放的,随着业务的发展,跨域请求的需求越来越迫切,因此W3C委员会制定了XMLHttpRequest跨域访问标准。他需要目标域返回的HTTP头来授权是否允许跨域访问。因为HTTP头对于JavaScript来说一般是无法空至的。所以认为这个方案是可以实施的。
注意:跨域访问方案的安全基础就是信任”JavaScript无法控制该HTTP头“,如果此信息基础被打破,则此方案也将不再安全。
2.2 浏览器沙箱
浏览器的多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,也不会影响到其他进程。
Google Chrome 是第一个采取多进程架构的浏览器,Google Chrome的主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。
多进程架构最明显的一个好处是,相对于单进程浏览器,在发生崩溃时,多进程浏览器只崩溃当前Tab页,而单进程浏览器会崩溃整个浏览器进程。
渲染引擎由Sandbox隔离,网页代码要与浏览器内核通信、与操作系统通信都要通过IPC channel。
Sandbox即沙箱,设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离去以外的资源。
2.3 恶意网址拦截
恶意网址拦截的工作原理很简单,一般是浏览器周期性的从服务器端获取一份最新的恶意网址黑名单,如果用户上网时访问的网址存在于此黑名单中,浏览器会抬出一个警告页面。
常用的恶意网址分为两类:一类是挂马网站,这些网站通常包含恶意的攻击脚本。另一类是钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。
除了恶意网址拦截功能外,主流浏览器都开始支持EV SSL证书,以增强对安全网站的识别。
EVSSL证书是全球数字证书颁发机构与浏览器厂商一起打造的增强型证书,其主要特色是浏览器会给予EVSSL证书特殊待遇。EVSSL证书也遵循X509标准,并向前兼容普通证书。
支持EV模式的浏览器会在地址栏特别标注(绿色)。
第三章 跨站脚本攻击(XSS)
3.1 XSS简介
跨站脚本攻击,英文全程是Cross Site Script,本来缩写是CSS,但是为了和层叠样式表有所区别,所以在安全领域叫做"XSS".
XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,空至用户浏览其的一种攻击。
XSS长期以来被列为客户端Web安全中的头号大敌。
XSS根据效果的不同可以分为如下几类:
第一种:反射型XSS(非持久型XSS)
反射型XSS只是简单的把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。
第二种:存储型XSS(持久型XSS)
存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。
(比较常见的一个场景就是,黑客写下一篇包含恶意JavaScript代码在博客文章中。。。。。)
第三种:DOM Based XSS
这种XSS并非按照“数据是否保存在服务器端”来划分。从效果上来说,它属于反射型XSS。
是因为他形成原因比较特殊,通过修改页面的DOM节点形成的XSS。
3.2 XSS攻击进阶
3.2.1 初探XSS Payload
XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这种用以完成各种功能的恶意脚本,被称为“XSS Payload”。
XSS Payload实际上就是JavaScript脚本,所以任何JavaScript脚本能实现的功能,XSS Payload都能做到。
通过XSS攻击,可以完成“Cookie 劫持”攻击,直接登录用户的账户。
Cookie的“HttpOnly”标识可以防止“Cookie劫持”。
Cookie劫持并非所有时候都有效,可以通过植入HttpOnly标识,也可以把Cookie和客户端IP绑定。
3.2.2 强大的XSS Payload
3.2.2.1 构造GET与POST请求
get请求:
var img = document.createElement("img"); img.src = "http://www.a.com"; document.body.appendChild(img);
post请求:
方法1:构造form表单,自动提交。
方法2:innerHTML
3.2.2.2 XSS钓鱼
XSS的攻击过程是在浏览器中通过JavaScript自动进行的。也就是说缺少了与用户交互的过程。就算存在用户交互,XSS也有解决办法:
验证码:攻击者可以在远程CSS后台接受当前验证码,并将验证码的值返回给当前XSS Payload,从而绕过验证码。
窃取密码:利用JavaScript在当前页面“画出”一个伪造的登录框,当用户输入密码之后,其密码将被发送到黑客的服务器上。
3.2.2.3 识别用户浏览器
1.通过XSS读取浏览器的UserAgent对象。
2.通过浏览器独特的对象。
3.2.2.4 识别用户安装的软件
通过收集常见软件的classid,就可以扫描出用户电脑中安装的软件列表。
3.2.2.5 CSS History Hack
利用style的visited属性,如果用户访问过某个链接,那么这个链接的颜色会与众不同。
3.2.3 XSS攻击平台
Attack API 、BeEF 、 XSS-Proxy
3.2.4 终极武器:XSS Worm
XSS Worm是XSS的一种终极利用方式,他的破坏力和影响力是巨大的。但是发起XSS Worm攻击也有一定的条件。
一般来说,用户之间发生交互行为的界面,如果存在存储型XSS,则比较y容易发起XSS Worm攻击。
3.2.6 XSS构造技巧
1.使用<base>标签劫持页面中的相对路径标签。
2.window.name不受同源限制。
3.3 XSS的防御
1.HttpOnly
2.输入检查
3.输出检查
4.正确防御XSS
HtmlEncode 、 JavaScriptEncode 、 encodeForCSS 、 URLEncode
5.处理富文本
事件:严格禁止
标签:使用白名单,避免使用黑名单。
第四章 跨站点请求伪造(CSRF)
CSRF的全名是Cross Site Request Forgery,翻译成中文就是跨站点请求伪造。
4.1CSRF简介
4.2CSRF进阶
4.2.1浏览器的Cookie策略
浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另一种是“Third-party Cookie”,也称“本地Cookie”。
两者的区别在于,本地Cookie是服务器Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,所以这种Cookie保存在本地;而Session Cookie则没有指定Expire时间,所以浏览器关闭后,Session Cookie就失效了。
在浏览网站的过程中,若是一个网站设置了Session Cookie,那么在浏览器进程的生命周期中,即使浏览器新打开了Tab页,Session Cookie也都是有效的。Session Cookie保存在浏览器进程的内存中;而Third-party Cookie则保存在本地。
如果浏览器从一个域页面中,要加在另一个域的资源,由于安全原因,某些浏览器会阻止Third-party Cookie的发送。
当前主流浏览器中,
默认拦截Third-party Cookie的有:IE6、IE7、IE8、Safari;
不会拦截的有:Firefox2、Firefox3、Opera、Google Chrome、Android等。
4.2.2 P3P头的副作用
如果网站返回给浏览器的HTTP头中包含了P3P头,则在某种程度上来说,将允许浏览器发送第三方Cookie。在IE下即使是<iframe>、<script>等标签也将不再拦截第三方Cookie的发送。
在网站的业务中,P3P头主要用户类似广告等需要跨域访问的页面。但是很遗憾的是,P3P头设置后,对于Cookie的影响将扩大到整个域中的所有页面,因此Cookie是以域和path为单位的,这并不符合最小权限的原则。
P3P头只需要由网站设置一次即可,之后每次请求都会遵循此策略。
4.3 CSRF的防御
CSRF能攻击成功的本质原因是重要操作的所有参数都可以呗攻击者猜测到。
1.验证码
2.Referer Check
3.参数加密
4.Token
i.Token要足够随机
ii.生成多个有效Token来应付多页面共存的场景。
iii.token不能出现在URL中,防止泄漏
iv.token存在放在Session或者Cookie中因此不能同时存在XSS漏洞。
第五章 点击劫持(ClickJacking)
5.1什么是点击劫持
点击劫持是一种视觉上的欺骗手段。如果攻击者使用一个透明的不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页进行操作,此时用户将在不知情的情况下点击透明的iframe。
点击劫持攻击与CSRF攻击有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是CSRF攻击的过程中,如果出现用户交互的页面,则攻击可能无法顺利完成。与之相反的是,点击劫持没有这个顾虑,他利用的就是与用户产生交互的页面。
5.2Flash点击劫持
eg.点击不断变化的button,诱使用户完成一系列的操作。
5.3 图片覆盖攻击
覆盖联系电话
5.6 防御ClickJacking
1.frame busting
2.X-Frame-Options
DENY 、 SAMEORIGIN 、 ALLOW-FROM origin
第六章 HTML5安全
暂时未理解