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