HTML5新标签
新标签的XSS
一些XSS Filter如果建立了一个黑名单的话,则可能就不会覆盖到HTML5新增的标签和功能,从而避免发生XSS。
iframe的sandbox
在HTML5中,专门为iframe定义了一个新的属性,叫sandbox。使用sandbox这一个属性后,<iframe>标签加载的内容将被视为一个独立的“源”,其中的脚本将被禁止执行,表单被禁止提交,插件被禁止加载,指向其他浏览对象的链接也会被禁止。
sandbox属性可以通过参数来支持更精确的控制。有以下几个值可以选择:
- allow-same-origin:允许同源访问;
- allow-top-navigation:允许访问顶层窗口;
- allow-forms:允许提交表单;
- allow-scripts:允许执行脚本。
Link Types: noreferrer
在HTML5中为<a>标签和<area>标签定义了一个新的Link Types: noreferrer。
顾名思义,标签指定了noreferrer后,浏览器在请求该标签指定的地址时将不再发送Referer。
Canvas的妙用
<canvas>标签让JavaScript可以在页面中直接操作图片对象,也可以直接操作像素,构造出图片区域。
Canvas提供的强大功能,甚至可以用来破解验证码。
其他安全问题
Cross-Origin Resource Sharing
Origin Header用于标记HTTP发起的“源”,服务器端通过识别浏览器自动带上的这个Origin Header,来判断浏览器的请求是否来自一个合法的“源”。Origin Header可以用于防范CSRF,它不像Referer那么容易被伪造或清空。
postMessage——跨窗口传递消息
在HTML5中,为了丰富Web开发者的能力,制定了一个新的API:postMessage。
postMessage允许每一个window(包括当前窗口、弹出窗口、iframes等)对象往其他的窗口发送文本消息,从而实现跨窗口的消息传递。这个功能是不受同源策略限制的。
在使用postMessage()时,有两个安全问题需要注意。
(1)在必要时,可以在接收窗口验证Domain,甚至验证URL,以防止来自非法页面的消息。这实际上是在代码中实现一次同源策略的验证过程。
(2)如果将消息写入innerHTML,甚至直接写入script中,则可能会导致DOM based XSS的产生。根据“Secure By Default”原则,在接收窗口不应该信任接收到的消息,而需要对消息进行安全检查。
Web Storage
Web Storage用来在浏览器中存储信息。
Web Storage分为Session Storage和Local Storage。Session Storage关闭浏览器就会失效,而Local Storage则会一直存在。Web Storage就像一个非关系型数据库,由Key-Value对组成,可以通过JavaScript对其进行操作。
Web Storage也受到同源策略的约束,每个域所拥有的信息只会保存在自己的域下。
Web Storage让Web开发更加地灵活多变,它的强大功能也为XSS Payload大开方便之门。攻击者有可能将恶意代码保存在Web Storage中,从而实现跨页面攻击。
当Web Storage中保存有敏感信息时,也可能会成为攻击的目标,而XSS攻击可以完成这一过程。