HTML5安全風(fēng)險(xiǎn)之WebSQL攻擊詳解

一、WebSQL安全風(fēng)險(xiǎn)簡介
數(shù)據(jù)庫安全一直是后端人員廣泛關(guān)注和需要預(yù)防的問題。但是自從HTML5引入本地?cái)?shù)據(jù)庫和WebSQL之后,前端開發(fā)對(duì)于數(shù)據(jù)庫的安全也必須要有所了解和警惕。WebSQL的安全問題通常表現(xiàn)為兩個(gè)部分:
第一種是SQL注入:和本地?cái)?shù)據(jù)庫一樣,攻擊者可以通過SQL注入點(diǎn)來進(jìn)行數(shù)據(jù)庫攻擊。
另外一方面,如果Web App有XSS漏洞,那么本地?cái)?shù)據(jù)很容易泄漏,可以想想本地?cái)?shù)據(jù)庫里存儲(chǔ)了用戶最近交易記錄或者私信的情況。
二、WebSQL安全風(fēng)險(xiǎn)詳析
1、SQL注入
例如我們有一個(gè)URL為http:/blog.csdn.net/hfahe?id=1,它接收了一個(gè)id參數(shù)來進(jìn)行本地?cái)?shù)據(jù)庫查詢并輸出,對(duì)應(yīng)的SQL語句為“select name from user where id = 1”。
但是針對(duì)這個(gè)簡單的SQL查詢,攻擊者可以構(gòu)造一個(gè)虛假的輸入數(shù)據(jù)“1 or 1 = 1”,那么我們的SQL語句將變?yōu)?ldquo;select name from user where id = 1 or 1 = 1”。這就相當(dāng)糟糕了,因?yàn)?=1這個(gè)條件總是成立的,那么這條語句將遍歷數(shù)據(jù)庫user表里的所有記錄并進(jìn)行輸出。
利用這種方式,攻擊者可以構(gòu)造多種攻擊的SQL語句,來操縱用戶的本地?cái)?shù)據(jù)庫記錄。
2、XSS與數(shù)據(jù)庫操縱
在有XSS漏洞的情況下,攻擊者獲取本地?cái)?shù)據(jù)需要如下幾個(gè)步驟:
1)獲取JavaScript數(shù)據(jù)庫對(duì)象
2)獲取SQLite上的表結(jié)構(gòu)
3)獲取數(shù)據(jù)表名
4)操作數(shù)據(jù)
例如如下腳本完整的實(shí)現(xiàn)了上面的步驟,我在Chrome控制臺(tái)里運(yùn)行即可得到用戶本地?cái)?shù)據(jù)庫的表名,利用這個(gè)表名攻擊者可以用任何SQL語句來完成攻擊。
三、防御之道
針對(duì)WebSQL攻擊,我們有如下方法預(yù)防:
1) 檢查輸入類型,過濾危險(xiǎn)字符
我們需要保證輸入類型符合預(yù)期,例如上面的id參數(shù)一定是數(shù)字類型;同時(shí)過濾掉危險(xiǎn)的關(guān)鍵字和符號(hào),像PHP里addslashes這個(gè)函數(shù)的作用一樣。
2) 在SQL語句中使用參數(shù)形式
SQL語句是可以用參數(shù)形式的,例如
01.executeSql("SELECTname FROM stud WHERE id=" + input_id)
這種字符串拼接的形式并不安全,可以換為
executeSql("SELECTname FROM stud WHERE id=?“, [input_id]);)
這樣能保證參數(shù)的輸入符合設(shè)定的類型。
3)謹(jǐn)慎對(duì)待每一次SQL操作
無論是select、modify、update或者delete,你編寫的任何一條SQL語句操作都有可能成為攻擊者的攻擊對(duì)象,造成重大損失,所以都必須要謹(jǐn)慎對(duì)待。
4)不要存儲(chǔ)重要數(shù)據(jù)
本地?cái)?shù)據(jù)庫永遠(yuǎn)透明而不安全,重要的數(shù)據(jù)必須要存儲(chǔ)在服務(wù)器上,本地?cái)?shù)據(jù)庫里沒有重要數(shù)據(jù)就不會(huì)對(duì)用戶造成重大損失。
5)杜絕XSS漏洞
以上就是WebSQL攻擊詳細(xì)介紹,希望對(duì)大家學(xué)習(xí)WebSQL攻擊有所幫助。
相關(guān)文章
HTML5操作WebSQL數(shù)據(jù)庫的實(shí)例代碼
下面通過本文給大家分享HTML5操作WebSQL數(shù)據(jù)庫的實(shí)例代碼,感興趣的朋友一起看看吧2017-08-26