HTML5是W3C指定的新一代HTML语言的标准。
HTML新标签
新标签的XSS
HTML5定义了很多新标签、新事件、新属性,这有可能带来新的XSS攻击。
一些XSS Filter如果简历一个黑名单的话,则可能就不会覆盖到HTML新增的标签和功能,从而避免发生XSS。
为了总结新增的变化,有安全研究者建立了一个HTML5 Security Cheatsheet项目。
在HTML5中,专门为iframe
定义了一个新的属性,叫sandbox。使用sandbox后,iframe
标签加载的内容将被视为一个独立的“源”(参考同源策略),其中的脚本将被禁止执行,表单被禁止提交,插件被禁止加载,指向其他浏览对象的链接也被禁止。
sandbox属性可以通过参数来支持更精确的控制。
- allow-same-origin:允许同源访问;
- allow-top-navagation:允许访问顶层窗口;
- allow-forms:允许提交表单;
- allow-scripts:允许执行脚本。
有的行为,例如弹窗,即使设置了allow-scripts也是不被允许的。
Link Types:noreferer
在HTML5中为<a>
标签和<area>
标签定义了一个新的Link Types:noreferer。意味着,标签指定了noreferer后,浏览器在请求该标签指定的地址时,将不再发送referer。
Canvas的妙用
Canvas可以说是HTML5中最大的创新之一。不同于<img>
标签只是远程加载一个图片,<canvas>
标签让JavaScript可以在页面中直接操作图片对象,也可以直接操作像素,构造出图片区域。
Canvas提供的强大功能,甚至可以用来破解验证码,最大的好处是可以在浏览器环境中实现在线破解,大大的降低了攻击门槛。
其他安全问题
Cross-Origin Resource Sharing
浏览器实现的同源策略限制了脚本的跨域请求。但互联网的发展趋势使得跨域访问的需求也变得越来越迫切。
假如从http://www.a.com/test.html
发起一个跨域请求,请求的地址为http://www.b.com/test.php
,如果服务器返回一个HTTP Header:
Access-Control-Allow_Origin: http://www.a.com
那么这个跨域请求会被通过,在这个过程中,http://www.a.com/test.html
发起的请求还必须带上一个Origin Header
。
Origin Header用于标记HTTP发起的源,服务器通过识别浏览器自动带上的这个Origin Header,来判断浏览器的请求是否来自一个合法的源,这样,可以用于防范CSRF,并且不容易被伪造或清空。
如果跨域请求是下面这样设置的话是非常危险:
Access-Control-Allow_Origin: *
它将允许任意的跨域请求都被允许,等同于没有做跨域限制。
postMessage——跨窗口传递信息
postMessage允许每一个window(包括当前窗口、弹出窗口、iframes等)对象往其他的窗口发送文本消息,从而实现跨窗口的消息传递。这个功能是不受同源策略限制的。在使用postMessage函数时,需要注意两个安全问题:
- 在必要时,可以在接收窗口验证Domain,甚至验证URL,以防止来自非法页面的消息。这实际上是在代码中实现一次同源策略的验证过程。
- 在接收窗口不应该新人接收到的消息,而需要对消息进行安全检查。
使用postMessage也会使XSS Payload变得更加的灵活。
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攻击可以实现这一过程。