本節書摘來自華章計算機《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。