HTML5安全風(fēng)險(xiǎn)詳析之二:Web Storage攻擊
一、WebStorage簡介
HTML5支持WebStorage,開發(fā)者可以為應(yīng)用創(chuàng)建本地存儲(chǔ),存儲(chǔ)一些有用的信息。例如LocalStorage可以長期存儲(chǔ),而且存放空間很大,一般是5M,極大的解決了之前只能用Cookie來存儲(chǔ)數(shù)據(jù)的容量小、存取不便、容易被清除的問題。這個(gè)功能為客戶端提供了極大的靈活性。
二、攻擊方式
LocalStorage的API都是通過Javascript提供的,這樣攻擊者可以通過XSS攻擊竊取信息,例如用戶token或者資料。攻擊者可以用下面的腳本遍歷本地存儲(chǔ)。
- 01.if(localStorage.length){
- 02. for(I in localStorage) {
- 03. console.log(i);
- 04. console.log(localStorage.getItem(i));
- 05. }
- 06.}
同時(shí)要提一句,LocalStorage并不是唯一暴露本地信息的方式。我們現(xiàn)在很多開發(fā)者有一個(gè)不好的習(xí)慣,為了方便,把很多關(guān)鍵信息放在全局變量里,例如用戶名、密碼、郵箱等等。數(shù)據(jù)不放在合適的作用域里會(huì)帶來嚴(yán)重的安全問題,例如我們可以用下面的腳本遍歷全局變量來獲取信息。
- 01.for(iin window) {
- 02. obj=window[i];
- 03. if(obj!=null||obj!=undefined)
- 04. var type =typeof(obj);
- 05. if(type=="object"||type=="string") {
- 06. console.log(“Name:”+i);
- 07. try {
- 08. my = JSON.stringify(obj);
- 09. console.log(my);
- 10. } catch(ex) {}
- 11. }
- 12.}
三、攻擊工具
HTML5dump的定義是“JavaScriptthat dump all HTML5 local storage”,它也能輸出HTML5 SessionStorage、全局變量、LocalStorage和本地?cái)?shù)據(jù)庫存儲(chǔ)。
四、防御之道
對(duì)于WebStorage攻擊的防御措施是:
1、數(shù)據(jù)放在合適的作用域里
例如用戶sessionID就不要用LocalStorage存儲(chǔ),而需要放在sessionStorage里。而用戶數(shù)據(jù)不要儲(chǔ)存在全局變量里,而應(yīng)該放在臨時(shí)變量或者局部變量里。
2、不要存儲(chǔ)敏感的信息
因?yàn)槲覀兛傄矡o法知道頁面上是否會(huì)存在一些安全性的問題,一定不要將重要的數(shù)據(jù)存儲(chǔ)在WebStorage里。