2.5 HTML5技術
HTML5是Web中核心語言HTML的規范,用戶使用任何手段進行網頁瀏覽看到的內容原本都是HTML格式的,在瀏覽器中通過一些技術處理將其轉換成為可識別的信息。
HTML5在HTML4.01的基礎上進行了一定的改進,HTML5將Web帶入一個成熟的應用平臺,在這個平臺上,對視頻、音頻、圖像、動畫,以及與設備的交互都進行了規范。
1.XSS攻擊
HTML5定義了很多新標簽、新事件,這有可能帶來新的XSS攻擊。
(1)<video>
HTML5中新增的<video>標簽可以在網頁中遠程加載一段視頻。與之類似的還有<audio>標簽。

(2)iframe的sandbox
在HTML5中,專門為iframe定義了一個新的屬性sandbox。
使用sandbox屬性后,<iframe>標簽加載后的內容將被視為一個獨立的“源”,其中的腳本將被禁止執行,表單將被禁止提交,插件被禁止加載,指向其他瀏覽器對象的鏈接也會被禁止。
sandbox屬性可以通過參數來進行更精確的控制,有以下幾個值可供選擇。
● allow-same-origin:允許同源訪問。
● allow-top-navigation:允許訪問頂層窗口。
● allow-forms:允許提交表單。
● allow-scripts:允許執行腳本。
實例:

(3)Link Type:noreferrer
在HTML5中為<a>標簽和<area>標簽定義了一個新的Link Type:noreferrer,指定noreferrer后,瀏覽器在請求該標簽指定的地址時將不再發送referer。

這種設計是出于保護敏感信息和隱私的考慮。因為referer可能會泄露一些敏感的信息。
這個標簽需要開發者手動添加到頁面的標簽中,對于有需求的標簽可以選擇使用noreferrer。
2.其他安全問題
常見的其他安全問題包括跨域資源共享、跨窗口傳遞消息和Web Storage。
(1)跨域資源共享(Cross-Origin Resource Sharing,CORS)
W3C委員會決定制定一個新的標準來解決日益迫切的跨域訪問問題。但是CORS如果設置有錯,就會帶來安全隱患。如果設置如下:

表示允許客戶端的跨域請求通過。在這里使用了通配符“*”,這是極其危險的,它將允許來自任意域的開放請求成功訪問。正確的做法是配置允許訪問的列表白名單。
(2)跨窗口傳遞消息(postMessage)
postMessage允許每一個Windows(包括當前窗口、彈出窗口和iframe等)對象向其他的窗口發送文本消息,從而實現跨窗口的消息傳遞。此功能不受同源策略限制。
在使用postMessage()時,有兩個安全問題需要注意。
● 必要時可以在接收窗口驗證Domain,甚至驗證URL,以防止來自非法頁面的消息。這實際是在代碼中實現一次同源策略的驗證過程。
● 接收的消息寫入textContent,但在實際應用中,如果將消息寫入innerHTML,甚至直接寫入Script中,則可能會導致DOM based XSS的產生。根據“secure by default”原則,在接收窗口不應該信任接收到的消息,而需要對消息進行安全檢查。
(3)Web Storage
在過去的瀏覽器中能夠存儲信息的方法有以下幾種。
● Cookie:主要用于保存登錄信息和少量信息。
● Flash Shared Object和IE UserData:這兩個是Adobe與微軟自己的功能,并未成為一個通用化的標準。
● Web Storage:在客戶端有一個較為強大和方便的本地存儲功能。Web Storage分為Session Storage和Local Storage,前者關閉瀏覽器就會消失,后者則會一直存在。Web Storage就像一個非關系型數據庫,由key-value對組成,可以通過JavaScript(JS)對其進行操作。
Web Storage的使用方法如下。
1)設置一個值:window.sessionStorage.setItem(key,value);。
2)讀取一個值:window.sessionStorage.getItem(key);。
Web Storage也受到同源策略的約束,每個域所擁有的信息只會保存在自己的域下。
Web Storage的強大功能也為XSS Payload打開方便之門,攻擊者有可能將惡意代碼保存在Web Storage中,從而實現跨頁面攻擊。所以程序員在使用Web Storage時,一定不能在其中保存認證、用戶隱私等敏感信息。