SQL注入攻擊對企業(yè)安全形成巨大潛在威脅。一旦這種攻擊得逞,黑客可利用這種攻擊危害你的網(wǎng)絡(luò)并訪問破壞你的數(shù)據(jù),甚至控制你的電腦。
什么是SQL注入?
SQL注入的原理十分簡單。當(dāng)應(yīng)用把客戶數(shù)據(jù)當(dāng)作一種輸入的時候,那些心懷不軌的人就有機(jī)會注入刻意編寫的數(shù)據(jù),這些數(shù)據(jù)會導(dǎo)致輸入行為會成為SQL查詢的一部分。
SQL注入是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。
當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動態(tài)sql語句以訪問數(shù)據(jù)庫時,會發(fā)生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發(fā)生sql注入。sql注入可能導(dǎo)致攻擊者使用應(yīng)用程序登陸在數(shù)據(jù)庫中執(zhí)行命令。如果應(yīng)用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會變得很嚴(yán)重。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)sql命令,或者作為存儲過程的輸入?yún)?shù),這些表單特別容易受到sql注入的攻擊。而許多網(wǎng)站程序在編寫時,沒有對用戶輸入的合法性進(jìn)行判斷或者程序中本身的變量處理不當(dāng),使應(yīng)用程序存在安全隱患。這樣,用戶就可以提交一段數(shù)據(jù)庫查詢的代碼,根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個服務(wù)器,于是sql注入就發(fā)生了。
例如,以下列代碼為例:
SELECT * FROM Users WHERE Username='$username' AND Password='$password'
該代碼旨在展示用戶列表的用戶名和密碼記錄。使用Web界面,當(dāng)系統(tǒng)提示輸入用戶名和密碼的時候,黑客可能會輸入:
1 or 1=1
1 or 1=1
結(jié)果是:
SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1'
黑客已經(jīng)將OR條件成功注入驗證過程。更糟糕的是,條件'1' = '1'通常為真,因此這個SQL查詢往往會導(dǎo)致黑客繞過驗證過程。
用類似“;”的符號將另一個查詢附加到已有查詢之后(此附加查詢還對一部分已有查詢進(jìn)行解釋)。黑客可能刪除你的整個列表,甚至更改其中的數(shù)據(jù)。黑客可以用命令來控制你的操作系統(tǒng),從而操控你的電腦,并將之作為攻擊你其他網(wǎng)絡(luò)的一個中間站??偠灾琒QL注入攻擊可帶來以下后果:
數(shù)據(jù)私密性的喪失
數(shù)據(jù)完整性的喪失
數(shù)據(jù)泄漏
損害整個網(wǎng)絡(luò)