首页 > 代码库 > 白帽子讲WEB安全 第六章 HTML 5安全

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

1、新标签的XSS
     H5中定义类很多新标签、新事件可能带来XSS(为研究XSS攻击H5的变化成立项目----HTML 5 Security Cheatsheet)
     eg:
        1)  <video src="http://www.mamicode.com/"  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="http://www.mamicode.com/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();
 
 
     

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