**一、WebSQL安全風險簡介**
? ? ? 數據庫安全一直是后端人員廣泛關注和需要預防的問題。但是自從HTML5引入本地數據庫和WebSQL之后,前端開發對于數據庫的安全也必須要有所了解和警惕。WebSQL的安全問題通常表現為兩個部分:
? ? ?第一種是SQL注入:和本地數據庫一樣,攻擊者可以通過SQL注入點來進行數據庫攻擊。
? ? ?另外一方面,如果Web App有XSS漏洞,那么本地數據很容易泄漏,可以想想本地數據庫里存儲了用戶最近交易記錄或者私信的情況。
**二、WebSQL安全風險詳析**
? ? ?1、SQL注入
? ? ?例如我們有一個URL為[http:/blog.csdn.net/hfahe?id=1](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表里的所有記錄并進行輸出。

? ? ?利用這種方式,攻擊者可以構造多種攻擊的SQL語句,來操縱用戶的本地數據庫記錄。
??????? 2、XSS與數據庫操縱
? ? ?在有XSS漏洞的情況下,攻擊者獲取本地數據需要如下幾個步驟:
? ? ?1)獲取JavaScript數據庫對象
? ? ?2)獲取SQLite上的表結構
? ? ?3)獲取數據表名
? ? ?4)操作數據
? ? ?例如如下腳本完整的實現了上面的步驟,我在Chrome控制臺里運行即可得到用戶本地數據庫的表名,利用這個表名攻擊者可以用任何SQL語句來完成攻擊。
~~~
var dbo;
var table;
var usertable;
for(i in window) {
obj = window[i];
try {
if(obj.constructor.name=="Database"){
dbo = obj;
obj.transaction(function(tx){
tx.executeSql('SELECT name FROM sqlite_master WHERE type=\'table\'', [], function(tx,results) {
table = results;
},null);
});
}
} catch(ex) {}
}
if(table.rows.length > 1)
usertable = table.rows.item(1).name;
~~~
**三、防御之道**
? ? ? 針對WebSQL攻擊,我們有如下方法預防:
? ? ?1)? 檢查輸入類型,過濾危險字符
? ? ?我們需要保證輸入類型符合預期,例如上面的id參數一定是數字類型;同時過濾掉危險的關鍵字和符號,像PHP里addslashes這個函數的作用一樣。
? ? ?2)? 在SQL語句中使用參數形式
? ? ?SQL語句是可以用參數形式的,例如
~~~
executeSql("SELECTname FROM stud WHERE id=" + input_id)
~~~
? ? ?這種字符串拼接的形式并不安全,可以換為
~~~
executeSql("SELECTname FROM stud WHERE id=?“, [input_id]);)
~~~
? ? ?這樣能保證參數的輸入符合設定的類型。
? ? ?3)? 謹慎對待每一次SQL操作
? ? ?無論是select、modify、update或者delete,你編寫的任何一條SQL語句操作都有可能成為攻擊者的攻擊對象,造成重大損失,所以都必須要謹慎對待。
? ? ?4)? 不要存儲重要數據
? ? ?本地數據庫永遠透明而不安全,重要的數據必須要存儲在服務器上,本地數據庫里沒有重要數據就不會對用戶造成重大損失。
? ? ? 5)杜絕XSS漏洞
? ? ? XSS攻擊的防御將會在專門章節闡述,本文不展開詳析。
? ? ? 相關文章:
? ? ?《[關注HTML5安全風險](http://blog.csdn.net/hfahe/article/details/7960705)》
? ? ?《[HTML5安全風險詳析之一:CORS攻擊](http://blog.csdn.net/hfahe/article/details/7961566)》
? ? ?《[HTML5安全風險詳析之二:Web Storage攻擊](http://blog.csdn.net/hfahe/article/details/7961618)》
? ? ? 本文為原創文章,轉載請注明:來自[蔣宇捷的博客](http://blog.csdn.net/hfahe):[http://blog.csdn.net/hfahe](http://blog.csdn.net/hfahe)
- 前言
- AutoPager的簡單實現
- 利用CSS3特性巧妙實現漂亮的DIV箭頭
- IE9在Win7下任務欄新特性簡介
- 瀏覽器九宮格的簡單實現
- Raphael js庫簡介
- 使用CSS3構建Ajax加載動畫
- 用CSS3創建動畫價格表
- 用CSS3實現瀏覽器的縮放功能
- 用純CSS3實現QQ LOGO
- 用CSS3創建旋轉載入器
- 使用Javascript開發移動應用程序
- 用HTML5創建超酷圖像灰度漸變效果
- 使用CSS3創建文字顏色漸變(CSS3 Text Gradient)
- 僅用CSS創建立體旋轉幻燈片
- 如何創建跨瀏覽器的HTML5表單
- 用CSS3實現動畫進度條
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas動畫實例
- 談HTML5和CSS3的國際化支持
- 實現跨瀏覽器的HTML5占位符
- 前端開發必備工具:WhatFont Bookmarklet-方便的查詢網頁上的字體
- 使用HTML5和CSS3來創建幻燈片
- HTML5之美
- 如何使用HTML5創建在線精美簡歷
- 以小見大、由淺入深-談如何面試Javascript工程師
- 快速入門:HTML5強大的Details元素
- 用CSS3實現圖像風格
- HTML5視頻字幕與WebVTT
- 用純CSS3實現Path華麗動畫
- 用3個步驟實現響應式網頁設計
- 遇見CSS3濾鏡
- 關于CSS3濾鏡的碎念
- 用純CSS3繪制萌系漫畫人物動態頭像
- CSS3新的鼠標樣式介紹
- 用HTML5獻上愛的3D玫瑰
- 對HTML5 Device API相關規范的解惑
- 如何使用HTML5實現拍照上傳應用
- 2012第一季度國外HTML5移動開發趨勢
- HTML5新特性:范圍樣式
- 百度開發者大會-《用HTML5新特性開發移動App》PPT分享
- Chrome 19對于HTML5最新支持的動態:電池狀態API,全屏API,震動API,語音API
- 遇見Javascript類型數組(Typed Array)
- 用HTML5 Audio API開發游戲音樂
- 用HTML5實現人臉識別
- 用Javascript實現人臉美容
- Chrome 20對于HTML5最新支持的動態:顏色輸入,網絡信息API,CSS著色器
- 用HTML5實現手機搖一搖的功能
- 用HTML5實現iPad應用無限平滑滾動
- 用非響應式設計構建跨端Web App
- 了解SVG
- HTML5圖像適配介紹
- HTML5安全:內容安全策略(CSP)簡介
- HTML5安全:CORS(跨域資源共享)簡介
- 用CSS3 Region和3D變換實現書籍翻頁效果
- 談談移動App的思維誤區
- Chrome新特性:文件夾拖拽支持
- 《關注HTML5安全》
- HTML5安全風險詳析之一:CORS攻擊
- HTML5安全風險詳析之二:Web Storage攻擊
- HTML5圖像適配最新進展:響應式圖片規范草案
- HTML5移動Web App相關標準狀態及路線圖
- HTML5安全風險詳析之三:WebSQL攻擊
- Chrome引入WebRTC支持視頻聊天App
- HTML5安全風險詳析之四:Web Worker攻擊
- HTML5安全風險詳析之五:劫持攻擊
- HTML5安全風險詳析之六:API攻擊
- HTML5安全攻防詳析之七:新標簽攻擊
- 在iOS Safari中播放離線音頻
- 使用WebRTC實現遠程屏幕共享
- Firefox、Android、iOS遇見WebRTC
- HTML5光線傳感器簡介
- HTML5安全攻防詳析之八:Web Socket攻擊
- HTML5安全攻防詳析之完結篇:HTML5對安全的改進
- 激動人心!在網頁上通過語音輸入文字 - HTML5 Web Speech API介紹
- Web滾動性能優化實戰
- 用CSS3設計響應式導航菜單
- 用HTML5構建高性能視差網站
- 漫談@supports與CSS3條件規則
- HTML5下載屬性簡介
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(一)
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(二)
- 趨勢:Chrome為打包應用提供強大新特性
- 從HTML5移動應用現狀談發展趨勢
- 基于HTML5的Web跨設備超聲波通信方案