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