HTML5安全風險詳析之三:WebSQL攻擊

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語句來完成攻擊。

  1. 01.var dbo;    
  2. 02.var table;    
  3. 03.var usertable;    
  4. 04.for(i in window) {    
  5. 05.    obj = window[i];    
  6. 06.    try {    
  7. 07.        if(obj.constructor.name=="Database"){    
  8. 08.            dbo = obj;    
  9. 09.            obj.transaction(function(tx){    
  10. 10.                tx.executeSql('SELECT name FROM sqlite_master WHERE type=\'table\'', [], function(tx,results) {    
  11. 11.                    table = results;    
  12. 12.                },null);    
  13. 13.            });    
  14. 14.        }    
  15. 15.    } catch(ex) {}    
  16. 16.}    
  17. 17.if(table.rows.length > 1)    
  18. 18.    usertable = table.rows.item(1).name;  

3、防護之道

針對WebSQL攻擊,咱們有以下方法預防:

1)  檢查輸入類型,過濾危險字符

咱們須要保證輸入類型符合預期,例如上面的id參數必定是數字類型;同時過濾掉危險的關鍵字和符號,像PHP裏addslashes這個函數的做用同樣。

2)  在SQL語句中使用參數形式

SQL語句是能夠用參數形式的,例如

  1. 01.executeSql("SELECTname FROM stud WHERE id=" + input_id) 

這種字符串拼接的形式並不安全,能夠換爲

  1. executeSql("SELECTname FROM stud WHERE id=?「, [input_id]);) 

這樣能保證參數的輸入符合設定的類型。

3)謹慎對待每一次SQL操做

不管是select、modify、update或者delete,你編寫的任何一條SQL語句操做都有可能成爲攻擊者的攻擊對象,形成重大損失,因此都必需要謹慎對待。

4)不要存儲重要數據

本地數據庫永遠透明而不安全,重要的數據必需要存儲在服務器上,本地數據庫裏沒有重要數據就不會對用戶形成重大損失。

5)杜絕XSS漏洞

XSS攻擊的防護將會在專門章節闡述,本文不展開詳析。

相關文章
相關標籤/搜索