简介
HTML5中新增的一些标签和属性,使得XSS等web攻击产生了新的变化。HTML 5定义了很多新的标签,新标签的XSS HTML 5定义了很多新的标签、新的事件,这有可能带来新的XSS攻击。
Iframe的sandbox
<iframe>
标签一直以来都能在各种攻击中看到他的身影,在HTML5中,专门为iframe定义了一个新的属性,叫sandbox。使用sandbox这个属性后,<iframe>
标签加载的内容将被视为一个独立的"源",其中的脚本将被禁止执行,表单被禁止提交,插件被禁止加载,指向其他浏览器对象的链接也被禁止。这样极大的增加了应用使用iframe的安全性。
link types:noreferrer
在HTML5中为<a>
标签和<area>
标签定义了一个新的link types:noreferrer。标签指定了noreferrer后,浏览器在请求该标签指定的地址将不再发送referer,这种设计是出于保护敏感信息和隐私的考虑。因为通过referer可能泄露一些敏感信息。如果有需求,该标签需要开发者手动添加。
canvas的妙用
canvas可以说是HTML5中最大的创新之一。不同于<img>
标签只是远程加载一个图片,<canvas>
标签让JavaScript可以在页面中直接操作图片对象,也可以直接操作像素,构造出图片区域。canvas的出现极大的挑战了传统富客户端插件的地位,开发者甚至可以用canvas在浏览器上写一个小游戏。canvas提供的强大的功能,甚至可以用来破解验证码。这也大大降低了攻击的门槛。HTML5使得过去难以实现的事情,变为了可能。
其他安全问题
cross-origin resource sharing
Cross-Origin Resource Sharing 通常简称为:CORS。它是一种机制,这个机制使用了一个额外的HTTP响应头来赋予当前user-agent(浏览器)获得在当前源(origin)下使用非同源资源的权限。在访问非同源域时,会生成一个origin header,origin header用于标记http发起的源,服务器端通过识别浏览器自动带上的这个origin header,来判断浏览器发来的请求是否来自一个合法的源,他可以用来防御CSRF,它不像referer那样容易被伪造和清空。
postmessage 跨窗口传递消息
在HTML5中,为了丰富web开发者的能力,制定了一个新的API:PostMessage。postmessage允许一个window(包括当前窗口、弹出窗口、iframes等)对象往其它的发送文本消息,从而实现跨窗口的消息传递。这个功能是不受同源策略影响的。
在使用postmessage时的两个安全问题:
在必要时,可以在接收窗口验证domain,甚至验证URL,以防止来自非法页面的消息。这实际上是在代码中实现一次同源策略的验证过程。
尽量避免将接收的消息写入innerHTML、script中,因为那样有可能导致DOM Based XSS。
web storage
W3C提供的在客户端有一个较为强大和方便的本地存储功能。
web storage分为session storage(关闭浏览就会失效)、local storage(会一直存在)。webstorage就像一个非关系型数据库,由key-value对组成,可以通过JavaScript对其进行操作。
攻击者可以将恶意代码保存在web storage中,从而实现跨域攻击,当web storage中保存有敏感信息时,也可能会成为攻击目标,而XSS攻击可以实现这一过程。,可以预见web storage会被越来越多的开发者所接受,但是,也将带来越来越多的安全挑战。
详情请参考书籍
摘自:《白帽子讲Web安全》 — 吴翰清