WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機
SQL注入
SQL注入(SQL注入攻擊)就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊.
簡介[ ]
SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式編寫應(yīng)用程序的程序員也越來越多。但是由于程序員的水平及經(jīng)驗也參差不齊,相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。
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í)行命令。相關(guān)的SQL注入可以通過測試工具pangolin進行。如果應(yīng)用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會變得很嚴(yán)重。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造動態(tài)sql命令,或者作為存儲過程的輸入?yún)?shù),這些表單特別容易受到sql注入的攻擊。而許多網(wǎng)站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當(dāng),使應(yīng)用程序存在安全隱患。這樣,用戶就可以提交一段數(shù)據(jù)庫查詢的代碼,根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個服務(wù)器,于是sql注入就發(fā)生了。
SQL注入原理[ ]
- SQL命令可查詢、插入、更新、刪除等,命令的串接。而以分號字符為不同命令的區(qū)別。(原本的作用是用于SubQuery或作為查詢、插入、更新、刪除……等的條件式)
- SQL命令對于傳入的字串參數(shù)是用單引號字符所包起來。但連續(xù)2個單引號字符,在SQL數(shù)據(jù)庫中,則視為字串中的一個單引號字符。
- SQL命令中,可以注入注解連續(xù)2個減號字符——后的文字為注解,或“/*”與“*/”所包起來的文字為注解
- 如果在組合SQL的命令字串時,未針對單引號字符作取代處理的話,將導(dǎo)致該字符變量在填入命令字串時,被惡意竄改原本的SQL語法的作用
SQL注入影響[ ]
- 資料表中的資料外泄,例如個人機密資料,帳戶資料,密碼等。
- 數(shù)據(jù)結(jié)構(gòu)被黑客探知,得以做進一步攻擊(例如SELECT * FROM sys.tables)。
- 數(shù)據(jù)庫服務(wù)器被攻擊,系統(tǒng)管理員帳戶被竄改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
- 取得系統(tǒng)較高權(quán)限后,有可能得以在網(wǎng)頁加入惡意連結(jié)以及XSS。
- 經(jīng)由數(shù)據(jù)庫服務(wù)器提供的操作系統(tǒng)支援,讓黑客得以修改或控制操作系統(tǒng)(例如xp_cmdshell "net stop iisadmin"可停止服務(wù)器的IIS服務(wù))。
- 破壞硬盤資料,癱瘓全系統(tǒng)(例如xp_cmdshell "FORMAT C:")。
SQL注入防范[ ]
- 在構(gòu)造動態(tài)SQL語句時,一定要使用類安全(type-safe)的參數(shù)加碼機制。大多數(shù)的數(shù)據(jù)API,包括ADO和ADO. NET,有這樣的支持,允許你指定所提供的參數(shù)的確切類型(譬如,字符串,整數(shù),日期等),可以保證這些參數(shù)被恰當(dāng)?shù)豦scaped/encoded了,來避免黑客利用它們。一定要從始到終地使用這些特性。
- 建立一個正式的安全過程,做更新時,對所有的編碼做審評。
- 不要把敏感性數(shù)據(jù)在數(shù)據(jù)庫里以明文存放。
- 確認(rèn)編寫了自動化的單元測試,來特別校驗?zāi)愕臄?shù)據(jù)訪問層和應(yīng)用程序不受SQL注入攻擊。
- 鎖定數(shù)據(jù)庫的安全,只給訪問數(shù)據(jù)庫的web應(yīng)用功能所需的最低的權(quán)限。
- 從網(wǎng)上下載SQL通用防注入系統(tǒng)的程序,在需要防范注入的頁面頭部用 來防止別人進行手動注入測試。