1、WebSQL安全風險簡介前端
數據庫安全一直是後端人員普遍關注和須要預防的問題。可是自從HTML5引入本地數據庫和WebSQL以後,前端開發對於數據庫的安全也必需要有所瞭解和警戒。WebSQL的安全問題一般表現爲兩個部分:sql
第一種是SQL注入:和本地數據庫同樣,攻擊者能夠經過SQL注入點來進行數據庫攻擊。數據庫
另一方面,若是Web App有XSS漏洞,那麼本地數據很容易泄漏,能夠想一想本地數據庫裏存儲了用戶最近交易記錄或者私信的狀況。後端
2、WebSQL安全風險詳析安全
一、SQL注入服務器
例如咱們有一個URL爲http:/blog.csdn.net/hfahe?id=1,它接收了一個id參數來進行本地數據庫查詢並輸出,對應的SQL語句爲「select name from user where id = 1」。函數
可是針對這個簡單的SQL查詢,攻擊者能夠構造一個虛假的輸入數據「1 or 1 = 1」,那麼咱們的SQL語句將變爲「select name from user where id = 1 or 1 = 1」。這就至關糟糕了,由於1=1這個條件老是成立的,那麼這條語句將遍歷數據庫user表裏的全部記錄並進行輸出。spa
利用這種方式,攻擊者能夠構造多種攻擊的SQL語句,來操縱用戶的本地數據庫記錄。.net
二、XSS與數據庫操縱sqlite
在有XSS漏洞的狀況下,攻擊者獲取本地數據須要以下幾個步驟:
1)獲取JavaScript數據庫對象
2)獲取SQLite上的表結構
3)獲取數據表名
4)操做數據
例如以下腳本完整的實現了上面的步驟,我在Chrome控制檯裏運行便可獲得用戶本地數據庫的表名,利用這個表名攻擊者能夠用任何SQL語句來完成攻擊。
3、防護之道
針對WebSQL攻擊,咱們有以下方法預防:
1) 檢查輸入類型,過濾危險字符
咱們須要保證輸入類型符合預期,例如上面的id參數必定是數字類型;同時過濾掉危險的關鍵字和符號,像PHP裏addslashes這個函數的做用同樣。
2) 在SQL語句中使用參數形式
SQL語句是能夠用參數形式的,例如
這種字符串拼接的形式並不安全,能夠換爲
這樣能保證參數的輸入符合設定的類型。
3)謹慎對待每一次SQL操做
不管是select、modify、update或者delete,你編寫的任何一條SQL語句操做都有可能成爲攻擊者的攻擊對象,形成重大損失,因此都必需要謹慎對待。
4)不要存儲重要數據
本地數據庫永遠透明而不安全,重要的數據必需要存儲在服務器上,本地數據庫裏沒有重要數據就不會對用戶形成重大損失。
5)杜絕XSS漏洞
XSS攻擊的防護將會在專門章節闡述,本文不展開詳析。