白帽子讲WEB安全 第六章 HTML 5安全

1、新标签的XSS

H5中定义类很多新标签、新事件可能带来XSS(为研究XSS攻击H5的变化成立项目----HTML 5 Security Cheatsheet)

eg:

1) <video src=" " onloadedmetadate="alter(XSS)">----远程加载视频

2) <audio>----远程加载音频

3) iframe 的新属性---sandbox:这一属性使iframe加载的内容变成一个独立的源,其中脚本被禁止执行,表单被禁止提交, 插件被禁止加载,指 向其他浏览器的链接也会被禁止。

sandbox属性的可控参数有:allow-same-origin----允许同源访问

allow-top-navigation-----允许访问顶层窗口

allow-forms--------------允许提交表单

allow-scripts------------允许执行脚本 (不允许弹出窗口)

4)Link Types:noreferrer

H5中<a>\<area>定义了新的Link Types:noreferrer----------浏览器在请求该标签指定的地址时将不再发送referer

(referer可能会泄漏一些敏感信息)。eg:<a href="xxx" rel="noreferrer"/>

5)Canvas-----H5的图形容器,使用脚本来绘制图形。

通过Canvas可以破解图片验证码(使用脚本)

2、其他安全问题

1)Cross-Origin Resource Sharing

浏览器请求头里 Origin :http://www.a.com/test.html----------标记了HTTP发起的源,服务器通过识别浏览器自动带上 的这个OriginHeader,来判断浏览器的请求是否来自一个合法的源。可以用于防范CSRF。

服务端返回:Access-Control-Allow-Origin: *-------------------允许客户端跨域请求通过(使用通配符“*”表示允许任意域 的跨域请求通过,十分危险)

2)postMessage---------跨窗口传递消息

H5中新的API:postMessage---------允许每个window窗口(包括当前窗口、弹出窗口、iframe等)向其他窗口发送文本 信息,此功能不受同源策略限制。

发送:window.postMessage("xxxxxxx");

接收:document.addEventListener("message",function(e){e.date})

使用时需注意的安全问题:

a、必要时,可以在接收窗口验证Domain,甚至URL,以防止非法页面的消息。

b、接收回的消息应进行安全检查,否则若直接写入innerHTML或script中,会导致DOM based XSS产生。

c、postMessage可以突破sandbox限制。

3)Web Storage---用于存储客户端(WEB端)复杂或数据量大的数据形式,类似cookie。存储形式key/value。

由两部分组成:sessionStorage与localStorage[1]

sessionStorage:用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束 后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

localStorage:用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

设值:window.sessionStorage.setItem(key,value); window.localStorage.setItem(key,value);

读值: window.sessionStorage.getItem(key); window.localStorage.getItem(key);

清空: window.sessionStorage.clear();