目录
2.1 Cross-Origin Resource Sharing
1、HTML5新标签
1.1 新标签的XSS
HTML5定义了很多新标签、新事件,很有可能带来新的XSS攻击。
如果建立了黑名单,黑名单里如果包含了HTML5新增的标签和功能,就可以避免XSS攻击。
1.2 iframe的sandbox
在HTML5里,专门为iframe定义了一个新的属性,叫sandbox。使用sandbox之后,<iframe>标签加载的内容将被视为一个独立的“源”,其中的脚本将被禁止执行,表单被禁止提交,插件被禁止加载,只想其他浏览对象的链接也被禁止。
sandbox属性可以通过参数来支持更精确的控制。
(1)allow-same-origin:允许同源访问
(2)allow-top-navigation:允许访问顶层窗口
(3)allow-forms:允许提交表单
(4)allow-scripts:允许执行脚本
但是有些行为即使设置了allow-scripts,也不被允许,例如弹出窗口
1.3 Link Types:noreferer
在HTML5中为<a>标签和<area>标签定义了一个新的Link Types:noreferer。
当标签指定了noreferer之后,浏览器在请求该标签指定的地址时将不再发送Referer。
<a href="xxx" rel="noreferer">test</a>
1.4 Canvas的妙用
不同于<img>标签只是远程加载一个图片,<canvas>标签让Javascript可以在页面中直接操作图片对象,也可以直接操作像素,构造出图片区域。开发者甚至可以用Canvas在浏览器上写一个小游戏。
以下浏览器支持<canvas>标签
(1) IE 7+
(2) Firefox 3.0+
(3) Safari 3.0+
(4) Chrome 3.0+
(5) Oprea 10.0+
(6) iPhone 1.0+
(7) Android 1.0+
Canvas甚至可以用来破解验证码。通过Javascript操作Canvas的每个像素点,从而自动识别验证码。
2、其他安全问题
2.1 Cross-Origin Resource Sharing
浏览器的同源策略限制了脚本的跨域请求,但跨域访问的需求不断扩大。W3C委员会决定指定一个新的标准来解决跨域访问问题。
发起的请求必须带上一个Origin Header,用于标记HTTP发起的“源”,服务器端通过识别浏览器自动带上的这个Origin Header,判断请求是否合法。因此,Origin Header可以用于防范CSRF,它不像Referer这么容易被伪造或者清空。
2.2 postMessage——跨窗口传递消息
在HTML5中,制定了一个新的API:postMessage。
postMessage允许每一个window(包括当前窗口、弹出窗口、iframe等)对象往其他的窗口发送文本消息,从而实现跨窗口的消息传递。这个功能不受同源策略的限制。
利用postMessage()给父窗口发消息,可以突破sandbox。
在使用postMessage()时,需要注意两个问题:
(1)在必要时,可以在接收窗口验证Domain,甚至验证URL,以防止来自非法页面的消息。实际上就是在代码中实现一次同源策略的验证过程。
(2)在接收窗口不应信任接收到的信息,需要对消息进行安全检查。
2.3 Web Storage
Web Storage 实现离线浏览功能。
为什么要有Web Storage 呢?过去浏览器存储信息的方法有以下几种:
(1)Cookie
(2)Flash Shared Object
(3)IE UserData
其中,Cookie主要用于保存登录凭证和少量信息,其最大长度的限制决定了不可能在Cookie中存储太多信息。而后两者只是Adobe与微软自己的功能,并未成为一个通用标准。因此,客户端出现了一个较为强大和方便的本地存储功能,这就是Web Storage 。
Web Storage 分为Session Storage和Local Storage。Session Storage关闭浏览器就会失效,而Local Storage会一直存在。Web Storage 就像一个非关系型数据库,由Key-Value对组成,可以通过Javascript对其进行操作。目前Firefox3和IE8都实现了Web Storage 。
使用方法:
设置一个值:window.sessionStorage.setItem(key,value);
读取一个值:window.sessionStorage.getItem(key);
Web Storage 也受同源策略的约束,每个域所拥有的信息只会保存在自己的域下。
它的出现让攻击者有了可乘之机,有可能将恶意代码保存在Web Storage中,从而实现跨页面攻击,XSS攻击也可以获取Web Storage中的敏感信息。