从HTML5官方网站上我们可以了解到,HTML5被称之为最近十年来Web开发标准最巨大的飞跃。HTML5不仅仅可以表示Web内容,还是一个应用平台。在HTML5这个平台上,相关的Web应用(包括视频、音频、图像、动画以及同电脑的交互等等)都可以被标准化。为此HTML5的推出就被很多人所关注。笔者有幸从安全的角度对HTML5标准进行先睹为快。根据笔者的观察,虽然HTML5在安全方面已经有所完善,但是仍然存在一些安全威胁,还需要持续改进。
一、本地存储,性能与安全直接的博弈
在以前版本的HTML中,通常情况下在本地客户端上只存储少量的信息,如通常以Cookies作为本地信息存储的对象。通常情况下,其存储的数据并不是很多,如存储简单的档案信息或者存储会话ID等等。由于其存储的数据量并不是很大,为此当用户需要多次访问相同的数据时,基本上需要多次从Web服务器上去获取。显然这会导致Web访问的性能下降。不过即使在客户端上只存储了少量的信息,但是这个Cookies安全问题仍然让人寝食不安。因为这个信息中可能存有用户名等机密的内容。
HTML5 Web开发标准在这方面做出了一定的调整。如允许在本地浏览器中存储大量的数据,并允许使用新类型的应用程序。之所以做出这个调整,主要是因为现在基于Web的应用程序越来越复杂,数据量越来越大,特别是多媒体等技术的应用。此时性能已经成为了影响Web发展的一个重要瓶颈。此时相关专家就可以通过在本地存储大量数据来提高应用程序的性能。但是由此就带来了比较大的安全隐患。由于保存在本地的数据缺乏有效的安全机制,为此一些敏感数据就有可能保存在客户端。此时不法分子就可以绕开原有的安全机制,通过物理访问等相关手段,比较轻松的活得敏感数据。
从技术的角度讲,从客户端处获取敏感数据要比在服务器上获取数据容易的多。如某个客户端本身就是肉鸡,或者说具有SQL注入攻击的潜在能力,此时保存在本地的敏感数据就会相当的危险。甚至攻击者可以通过同步机制,将一些恶意的数据通过合法的途径传入到服务器上。为此笔者认为,允许将大量数据保存在本地客户端,是牺牲安全来获取性能上的提升。
在实际部署时,就需要注意两个方面的内容。
一是需要注意,并不是所有企业都适合采用这种技术。如对于安全要求比较高的金融企业或者银行(像基金公司)。这种企业在开发应用程序时,就要区分对待。对于一些公共的数据,如每只股票的价格信息等等,存放在本地客户端,是没有安全方面的威胁的。因为这些数据大家都可以得到。而对于用户的交易信息等内容,则放在本地客户端的话,并不安全。举一个简单的例子,如果基金之王王亚伟的交易信息都保存在本地,那么攻击者只要能够获取他本地客户端的数据(从证券公司服务器获取这个数据比较困难,而从本地客户端获取这个数据比较简单),则每个人都可以成为基金之王了。所以在部署之前,需要考虑这么设计是否安全。
二是需要采取对应的安全措施。如果真的要这么做的话,一个必要的安全措施就是一开发人员需要验证数据是否是恶意的,即从合法的客户端上是否会给服务器上传恶意的数据。虽然要做到这一步比较困难,但是如果真的要在客户端上存储大量数据,此时就会有一个同步的需求。而要让同步数据安全的话,则这个验证就必不可少。即使比较困难,而要想法设法的去实现它。
二、跨域通信带来的安全隐患需要正视
在以前的版本中,对于服务器的请求出于安全的目的,有比较严格的限制。如HTML只允许JavaScrip发出XMLHTTP请求以实现调用回到原来服务器的目的。而HTML5标准则放开了这种限制。这个新的标准允许请求可以发送给任何允许这种请求的服务器。
这里需要注意,HTML5做出的这个调整有一个前提,即服务器是值得信任的。如果服务器不值得信任,那么将会带来严重的安全问题。在实际工作中,服务器的安全是相对的。如果要做大百分之百的安全,很少有企业可以做到。如企业的规模比较小,相关的服务器(包括Web服务器、邮箱服务器、域控制器等等)都是在企业内部的话,要做到服务器的安全都比较困难。如果企业规模扩大,服务器不在自己的眼皮底下,而在千里之外的外地办事处,此时恐怕没有人能够保证这台服务器是能够值得信任的。
这也就是说,如果企业需要使用新的HTML5标准,那么就需要对企业现有的网络安全做出比较大的调整。如需要增加企业级别防火墙、升级网络环境、企业与分支机构之间采用VPN或者专线连接等手段,来提高服务器的可信任程度。而无论采取什么样的错误,企业都必须有比较大的支出。这包括购买新设备以及后续的服务的支出。
举一个简单的例子,如果实现跨域通信的话,那么笔者就可以开发出一个网站。这个网站可以直接从其他网站中获取比较机密的信息,如别人花几百万买过来的一个比赛直播权。如用户可以创建一个糅合(将两种以上的使用公共或者私有数据库的Web应用合并形成一个整合应用,并通过JSON将第三方网站的信息(如比赛转播的信息)拿过来使用。通常情况下,这个网站可能会发送恶意数据到哦那个湖的浏览器正在运行的应用程序上。从而实现偷取敏感信息的目的。
为此在开发Web应用程序时,如果要使哟跨域通信,那么开发人员就必须仔细检查以确保信息是来源于他们直接的网站,而不是恶意的数据。以避免其他网站的的恶意代码产生的恶意信息。为此笔者认为,这个跨域通信的功能本身就具有比较大的安全隐患。HTML5之所以这个功能,主要是考虑到现在有80%以上的网站可能不需要这么严格的安全级别。为此为了提高这部分网站的Web应用的性能,所以就启用了这个功能。故企业在采用这个跨域通信的功能之前,还是需要评估一下自己企业的安全级别。如果能够容忍由此带来的安全隐患,以牺牲安全来获取性能上的提升,也并不一定不行。
另外如果确实需要跨域通信的企业,笔者建议还是采用老办法为好。即可可以使用不同的DOM文档对像类型/浏览器功能来模拟跨域通讯。这种方法的好处是在安全性上有保障。而其缺点是性能上并不是很好,毕竟其只是一个模拟跨域通讯。
三、采用IFRANME来防止恶意广告
现在Web应用程序比较头疼的问题是恶意广告和未经授权的更改。如客户端的主页访问了你的网页之后,主页就莫名其妙的被更改了。这会大大降低用户的忠诚度。HTML5并不是在安全性上没有任何的改进。至少其提出到料IFrame沙盒属性,能够有效的抵御恶意的第三方广告或者防止不可信任的内容重放与篡改。这是其在安全性上一个比较不错的改建。如果企业有这方面需求的话,那么在使用HTML5时,最好将这个属性启用起来,而不是禁用他。