PHP編程下有效防止MySQL數據庫注入攻擊 2009-07-11 09:46 SQL注入是網站危險的最重要來源之一.黑客往往會向一個網頁表單提交一些惡意代碼來達到一些注入目的.要了解注入的過程.我們先來看一下如下的基礎SQL SELECT語句: SELECT * FROM xmen WHERE username = 'wolverine' 以上SQL查詢會返回“xmen”表中username(用戶名)=“wolverine”的數據記錄。 其中wolverine為用戶通過表單提交,設想黑客使用如下用戶名 ' 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{ } ?> 這樣做的目的很明確,就是要驗證有效的用戶輸入.在提交服務器之前就把非法字符過濾掉.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
