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