官术网_书友最值得收藏!

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時,一定不能在其中保存認證、用戶隱私等敏感信息。

主站蜘蛛池模板: 依安县| 隆昌县| 望城县| 洪雅县| 塔河县| 宁陵县| 古浪县| 涞水县| 肇州县| 肃北| 呼伦贝尔市| 南川市| 青海省| 吴旗县| 礼泉县| 故城县| 大名县| 松桃| 淳化县| 保康县| 福安市| 西华县| 邳州市| 德令哈市| 广宗县| 武平县| 中宁县| 郧西县| 台中县| 永丰县| 阳城县| 泰州市| 宁陕县| 深泽县| 武冈市| 文昌市| 来凤县| 岐山县| 鸡西市| 天台县| 宣城市|