利用PHP程序設定防止MySQL注入或HTML表單濫用

 

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'])){

  }

  elseif ($empty==0){

  }else{

  }

  ?>

  該驗證腳本的一個優點是,它不接受空白輸入。一些惡意用戶還通過空白投入操縱數據庫。使用上面的腳本,只驗證一個文字變量, “ $name”。這意味着,如果有三個文字變量,你可以分別對每個變量設置一個驗證腳本,以確保每一個變量都在進入數據庫前通過了審查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章