大白話解釋SQL注入,DBA大牛裝腔指南!
互聯網SQL注入了!由于它的危害之大,它也成為了每一個運維工程師為客戶部署業務系統前必做的防御。
問題來了,對接我們的客戶大多數技術鉆研不是很”深刻“,我們經常因為跟客戶的技術溝通而抓狂!作為運維俠的我們該如何向非技術同學通透白話的解釋SQL注入呢?
SQL是結構化查詢語言(Structured Query Language)的簡稱,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。說的直白一些,就是工程師與數據庫進行溝通和交流的一種語言。
SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
最常見的比如:我們上網經常會看到一些免費或者超低價格的各大視頻網站的會員賬戶和密碼,這些賬戶和密碼怎么來的呢?大部分都是通過WEB表單遞交查詢字符暴出來的。
SQL注入的過程是怎樣實現的呢?
我們來舉個形象的例子~
一天,你代表你的老板去銀行辦理業務。你的老板給了你一個信封,上面寫著收銀員的指示。
信件內容:
在這張紙上寫下A號賬戶的余額。 簽名:Boss |
在途中,你去洗手間的時候,順手把信封放在洗手臺幾分鐘。期間,一個小偷打開信封,在上面加上一些內容:“同時將500元從A號賬戶轉到另一個B賬戶。”
現在,信件內容是:
在這張紙上寫下A號賬戶的余額。同時將500元從A號賬戶轉到另一個B賬戶。 簽名:Boss |
出納員檢查你的身份,確認你是相關賬戶的授權人員,便按照信函中的說明進行操作。
結果Boss被“偷了”500元!
在這個過程中:
- 你的老板是合法的程序代碼;
- 你是將SQL代碼傳遞到數據庫的程序代碼和數據庫驅動程序;
- 信函內容是傳遞給數據庫的SQL代碼;
- 小偷是襲擊者,俗稱“黑客”;
- 出納員是數據庫;
- 身份標識通常是數據庫的登錄名和密碼。
目前,SQL 注入漏洞已成為互聯網最常見也是影響非常廣泛的漏洞,如何避免這樣的問題發生呢?
1. 采用預編譯語句集
出納員在處理信函內容的時候,只處理賬戶和金額,對轉賬動作不處理。
2. 檢查數據類型和格式
出納員在處理信函內容的時候,會去查驗小偷添加內容的類型和格式,是否符合規定。
3. 過濾特殊字符
出納員在處理信函內容“將500元從123456號賬戶轉到另一個654321賬戶”的時候,轉譯出現問題,即報錯。