一、SQL注入簡(jiǎn)介: 1、簡(jiǎn)單而言,由于程序在執(zhí)行SQL數(shù)據(jù)庫(kù)操作之前,沒(méi)有對(duì)用戶的輸入進(jìn)行驗(yàn)證,導(dǎo)致非法用戶捏造的SQL語(yǔ)句也被數(shù)據(jù)庫(kù)引擎當(dāng)做正常SQL語(yǔ)句被執(zhí)行的現(xiàn)象; 2、非法用戶捏造的SQL語(yǔ)句可以獲得用戶名密碼、修改用戶名密碼、提升用戶權(quán)限、修改數(shù)據(jù)庫(kù)結(jié)構(gòu)、修改/刪除數(shù)據(jù)、向數(shù)據(jù)庫(kù)掛馬、破壞服務(wù)器等一系列破壞活動(dòng); 3、一些程序開(kāi)發(fā)高手寫(xiě)了許多專門(mén)用于注入的軟件,一般人使用也能達(dá)到很好的效果,因此,防御SQL注入勢(shì)在必行。 二、SQL注入原理: 1、SQL命令字符串可以使用分號(hào)連接,因此一般的查詢 1、SQL命令可查詢、插入、更新、刪除等,命令的串接。而以分號(hào)字符為不同命令的區(qū)別。(原本的作用是用于SubQuery或作為查詢、插入、更新、刪除……等的條件式) 2、SQL命令對(duì)于傳入的字符串參數(shù)是用單引號(hào)字符所包起來(lái)?!兜B續(xù)2個(gè)單引號(hào)字符,在SQL數(shù)據(jù)庫(kù)中,則視為字符串中的一個(gè)單引號(hào)字符》 3、SQL命令中,可以?shī)A帶注解《連續(xù)2個(gè)減號(hào)字符——后的文字為注解,或“/*”與“*/”所包起來(lái)的文字為注解》 4、因此,如果在組合SQL的命令字符串時(shí),未針對(duì)單引號(hào)字符作取代處理的話,將導(dǎo)致該字符變量在填入命令字符串時(shí),被惡意竄改原本的SQL語(yǔ)法的作用。 三、SQL注入危害: 1、引起數(shù)據(jù)庫(kù)資料外泄,例如機(jī)密數(shù)據(jù),賬戶數(shù)據(jù)、密碼數(shù)據(jù)等,也可能被修改用戶名密碼; 2、修改數(shù)據(jù)庫(kù)結(jié)構(gòu)、修改/刪除數(shù)據(jù)、向數(shù)據(jù)庫(kù)掛馬、破壞服務(wù)器等一系列破壞活動(dòng); 3、數(shù)據(jù)結(jié)構(gòu)被黑客探知,得以做進(jìn)一步攻擊(例如SELECT * FROM sys.tables); 4、數(shù)據(jù)庫(kù)服務(wù)器被攻擊,系統(tǒng)管理員帳戶被竄改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx'); 5、取得系統(tǒng)較高權(quán)限后,有可能得以在網(wǎng)頁(yè)加入惡意鏈接以及XSS; 6、經(jīng)由數(shù)據(jù)庫(kù)服務(wù)器提供的操作系統(tǒng)支持,讓黑客得以修改或控制操作系統(tǒng)(例如xp_cmdshell 'net stop iisadmin'可停止服務(wù)器的IIS服務(wù)); 7、破壞硬盤(pán)數(shù)據(jù)(例如xp_cmdshell 'FORMAT D:')。 四、如何防范SQL注入: 1、在設(shè)計(jì)程序時(shí),采用參數(shù)化查詢來(lái)訪問(wèn)數(shù)據(jù)庫(kù),不給客戶端輸入SQL語(yǔ)句的機(jī)會(huì); 2、生成靜態(tài)頁(yè)面,不執(zhí)行客戶端的SQL語(yǔ)句請(qǐng)求; 3、對(duì)輸入的字符串做驗(yàn)證,含有注入關(guān)鍵詞的(如:and select from)GET和POST提交等都攔截或者替換掉,但是可能導(dǎo)致正常用戶的提交也被錯(cuò)誤的攔截; 4、使用更高級(jí)的SQL防注入系統(tǒng),防御GET/POST/Cookie等方式的注入。 |