本节书摘来自华章计算机《web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》一书中的第1章,作者:(美) 希马(shema, m.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
书面语言的历史至少可以追溯到5000年前,当时的苏美尔人使用楔形文字来记录账簿、法律以及清单,这种原始的石刻标记语言为现代的超文本标记语言(html)开辟了道路。类似维基百科这样的网站,不就是收集了拜占庭法律、《吸血鬼猎人巴菲》剧集列表、《星际迷航》中的外星人名单等内容吗?由此可见,人类喜欢使用书面语言来记录各种信息。
很大程度上,html是基于多种事实上的实现发展起来的标准。很少有浏览器定义html是什么,这意味着html标准在一定程度上体现了真实世界。如果你根据规范来书写网页,那么浏览器将会按照你的期望来适当地渲染它。在早期的演化发展过程中,标准的缺点是当时的页面并不统一,不同的浏览器有着不同的怪异(quirk)模式,导致产生类似如下的脚注:“建议使用ie 4浏览本网页”、“建议使用mosaic浏览本网页”。这些怪异模式成为了开发人员的噩梦,导致出现不良设计模式(例如常见的通过用户代理嗅探来侦测性能而不是通过特性测试)或过度依赖于插件(例如shockwave)。标准中还包含一些很少使用的标签(< acronym>)、糟糕的ui设计(< frame>和< frameset>)或非常令人厌恶的标签(< bgsound>和< marquee>)。html2试图澄清某些差异,于1995年11月成为标准。html3未能与html2合并为可接受的标准。html4于1999年12月提出。
8年之后,html5作为公共草案出现,过了一年左右才大受欢迎。现如今,在html4出现12年之后,标准的最新版本正准备从草案状态变为正式状态。在这12年间,网络逐渐成为人们日常生活中无所不在的组成部分,从第一条包含网站url的电视广告到数十亿美元的ipo,再到伴随技术或文化的变迁带来的类似欺诈或犯罪这样的黑暗面。
当前的浏览器对html5的支持程度多种多样。很多网站以这样或那样的方式使用html5。本章所介绍的标准仍然是正在使用的草案,尽管如此,大多数细节都已经足够确定,最多只有javascript api或标头(header)发生细微的变化。主要的安全原则仍然是适用的。
html5中包含了web开发人员从他们最喜爱的浏览器中带来的事实标准映射到html5标准之中,但更重要的是,标准的制定者在历史实现与优化架构的规范之间进行了认真地考虑。html5最引人注目的特点就是对如何解析html文档进行了明确描述。最明显的是,各浏览器的实现并不一致,使得针对html和javascript的攻击可以围绕这些怪异模式下手乃至利用它们。我们将会在后续章节中介绍这些怪异模式带来的安全问题,尤其是第2章。
本章将介绍html5及其相关标准的新概念、关注点和考虑等。那些希望针对这些标准的设计找出快速攻击方法或细微漏洞的人会感到失望。由浏览器开发人员、网站开发人员以及安全性测试人员等人所组成的安全生态圈已经对html5给予了仔细的关注。通过对html4和html5的比较可以发现,在html4标准中,安全性(security)和隐私(privacy)这两个词分别出现了14次和1次,而在html5当前的草案中则分别出现了73次和12次。尽管更多次数地提及并不能够说明一定就会更加安全,但是至少体现出在标准的发展过程中,安全和隐私已经得到更多关注,变得更加重要。
新的标准并未解决浏览器可能面对的所有的安全问题,它所做的是减少之前的标准中不明确的做法、提供更多关于安全实践的指导、建立更严格的html解析规则、在不弱化浏览器的前提下引入新特性。新标准带来的好处是更好的浏览体验,缺点是浏览器竞相增加对新特性的支持以及网站开发人员接纳它们的过程中在实现中带来的错误和bug。