HTML5安全

HTML5新标签

新标签的XSS

XSSFilter如果建立了一个黑名单,则可能就不会覆盖的HTML5新增的标签和功能

比如HTML5中新增的<video>标签

<video src="url" onloadedmetadata="XSS1" ondurationchanged="XSS2" ontimeupdate="XSS3" tabidnex="0"></video>

HTML5 Security Cheatsheet: https://html5sec.org

iframe的sandbox

在HTML5中,专门为iframe定义了一个新的属性叫sandbox。使用sandbox属性后,<iframe>标签加载的内容被视为一个独立的“源”

其中的脚本禁止执行,表单禁止提交,插件禁止加载,指向其他浏览对象的链接也会被禁止

sandbox的属性值:

  • allow-same-origin: 允许同源访问
  • allow-top-navigation: 允许访问顶层窗口
  • allow-forms: 允许提交表单
  • allow-script: 允许执行脚本

可有的行为即使是设置了allow-script也不被允许,比如“弹出窗口”

noreferrer

HTML5中为<a>标签和<area>标签定义了一个新的Link Types: noreferrer

浏览器在请求该标签指定的地址时将不再发送Referrer

<a href="xxx" rel="noreferrer">test</a>

Canvas

<canvas>标签让Javascript在页面中直接操作图片对象,也可以直接操作像素。

攻击者可以通过<canvas>来破解验证码

Cross-Origin Resource Sharing

www.a.comwww.b.com发送一个跨域请求的时候会带上一个Origin Header来标记HTTP发起的源

www.b.com返回时会带上一个Access-Control-Allow-Origin的头

防止CSRF

postMessage——跨窗口传递消息

postMessage允许每一个window(包括当前窗口、弹出窗口、iframes等)对象往其他的窗口发送发送文本消息,从而实现跨窗口的消息传递。这个功能不受同源策略限制,

需要注意的安全问题:

  • 可以在接受窗口验证Domain,甚至验证URL,以防止来自非法界面的消息。(实际上是一次同源策略的炎症过程)
  • 接受的消息直接写入innerHTML甚至直接写入script中可能会导致DOM based XSS的产生。因此需要对消息进行安全检查

Web Storage

过去浏览器里能够存储信息的方法:

  • Cookie
  • Flash Shared Object
  • IE UserData

Cookie有最大长度限制,不能存储太多信息。后两者是Adobe与微软自己功能,不是通用标准

WebStorage是一个在客户端的一个有着较为强大和方便的本地存储功能的实现

Web Storage分为Session Storage和Local Storage

Web Storage像一个非关系型数据库,由Key-Value对组成

Web Storage也受到同源策略的约束,每个域的信息只会保存在自己的域下

但是Web Storage也可能方便XSS攻击