MySQL注入的意圖是接管網站資料庫並竊取資訊。常見的開來源資料庫,如MySQL,已經被許多網站開發人員用來儲存重要訊息,如密碼,個人資訊和管理資訊。
MySQL之所以流行,是因為它與最流行的伺服器端指令碼語言PHP一起使用。而且,PHP是主導互連網的Linux- Apache伺服器的主要語言。因此,這意味著駭客可以很容易地利用PHP就像Windows的間諜軟體一樣。
駭客向一個無擔保的網頁表單輸入大量惡意代碼(通過下拉式功能表,搜尋方塊,聯絡表單,查詢表單和複選框)。
惡意代碼將被送到MySQL資料庫,然後“注入”。要查看這個過程,首先考慮以下基本的MySQL SELECT查詢語句:
SELECT * FROM xmen WHERE username = ‘wolverine'
此查詢會向有“xmen”表的資料庫要求返回某一段MySQL中使用者名稱為“wolverine”的資料。
在Web表單中,使用者將輸入wolverine,然後這些資料將被傳到MySQL查詢。
如果輸入無效,駭客還有其他方法控制資料庫,如設定使用者名稱:
‘ OR '‘='‘
你可能認為使用正常的PHP和MySQL句法執行輸入是安全的,因為每當有人輸入惡意代碼,他們將會得到一個“無效的查詢”的訊息,但事實並非如此。駭客很聰明,且因為涉及資料庫清理和重設系統管理權限,任何一個安全性漏洞都不容易糾正。
兩種對MySQL注入攻擊的常見誤解如下:
1.網管認為惡意注入可用防毒軟體或反間諜功能軟體清理。事實是,這種類型的感染利用了MySQL資料庫的弱點。它不能簡單地被任何反間諜功能軟體或防毒程式刪除。
2. MySQL注入是由於複製了從另一台伺服器或外部來源被感染的檔案。事實並非如此。這種類型的感染是由於有人將惡意代碼輸入到網站不受保護表單,然後訪問資料庫。MySQL注入可通過刪除惡意指令碼清除掉,而不是使用防毒程式。
使用者輸入驗證流程
備份一個清潔的資料庫,並放置在伺服器外。輸出一套MySQL表並儲存在案頭。
然後轉到伺服器,先暫時關閉表單輸入。這意味著表單不能處理資料,網站被關閉了。
然後啟動清理進程。首先,在您的伺服器上,清理遺留的混亂的MySQL注入。更改所有的資料庫,FTP和網站的密碼。
在最壞的情況下,如果你清理遲了,你可以再次檢查在您伺服器上啟動並執行隱藏程式。這些隱藏程式是駭客安裝的木馬。將其完全刪除並更改所有FTP許可權。掃描伺服器上所有木馬程式和惡意軟體。
當您修改PHP指令碼程式時,將處理表單資料。防止MySQL注入的一個好辦法是:連使用者資料也不信任。使用者輸入驗證對於防止MySQL注入是相當重要的。
設計一個過濾器篩選出使用者輸入,以下是幾點提示:
1.輸入到表單的是數字。你可以通過測試它等於或大於0.001 (假設你不接受一個零)驗證它是不是數字。
2.如果是Email地址。驗證其是否由允許的字元組合構成,如“ @ ” ,A-Z,a-z或一些數字。
3.如果是人名或使用者名稱。可以通過是否包含任何非法字元驗證它,如and和*,是可用於SQL注入的惡意字元。
驗證數字輸入
下面的指令碼驗證了是否輸入一個從0.001至無限大的有效數字。值得一提的是,在一個PHP程式中,甚至可以允許使用一定範圍內的數字。使用此驗證指令碼可確保輸入到表單的只是一個數字。
假設在程式中有三個數字變數;您需要將它們進行驗證,我們將它們命名num1 , num2和num3:
複製代碼 代碼如下://Validate numerical input
if($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001)
{
}
else
{
}
?>
And條件可被延長到能容納超過三個數字。所以,如果你有10個,您將只需要擴充AND語句。
這可以用來驗證一個只接受數位表單,如合約數量,許可證號碼,電話號碼等。
驗證文字和郵件地址的輸入
以下可以用於驗證諸如使用者名稱,名字以及電子郵件地址的表單輸入: 複製代碼 代碼如下://Validate text input
if (! preg_match('/^[-a-z.-@,'s]*$/i',$_POST['name']))
{
}
else
if ($empty==0)
{
}
else
{
}
?>
該驗證指令碼的一個優點是,它不接受空白輸入。一些惡意使用者還通過空白投入操縱資料庫。使用上面的指令碼,只驗證一個文字變數, “ $name”。這意味著,如果有三個文字變數,你可以分別對每個變數設定一個驗證指令碼,以確保每一個變數都在進入資料庫前通過了審查。