白帽子讲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:用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束 后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
localStorage:用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
设值:window.sessionStorage.setItem(key,value); window.localStorage.setItem(key,value);
读值: window.sessionStorage.getItem(key); window.localStorage.getItem(key);
清空: window.sessionStorage.clear();