php mysql注入攻擊解決方案

來源:互聯網
上載者:User

標籤:

  首先說說sql注入攻擊的模式,基本上都是後台在接受前端傳遞的參數的時候將sql代碼或指令碼代碼混入到提交資訊中,如果在接受提交的參數的時候沒有做精確的資料驗證,很可能就讓別人鑽了空子;輕則暴庫,重則資料庫資料都會被刪;

  所以想要預防sql注入, 關鍵是程式員寫的代碼一定要嚴謹,對資料做嚴格的驗證,資料類型,長度,正則等都可以做;

  http://hudeyong926.iteye.com/blog/703074這個裡面驗證規則可以參考;

  在做防止sql注入的時候需要按照你傳入參數的類型進行過濾,理論上只要不符合你傳遞的參數類型的資料應該全部過濾掉,可以寫多個函數封裝起來,用到這個過濾就調用這個函數;這樣靈活性更高;

1、Regex過濾sql關鍵字,這個一般在傳參的時候肯定是不允許參數裡面帶這些資料的;

function inject_check($str1) {
//驗證傳入的參數中是否含有注入字元
return preg_match(‘/select|insert|and|or|update|delete|union|into|load_file|outfile|from|count\(|drop table|update|truncate|asc\(|mid\(|char\(|xp_cmdshell|exec|master|\/\*|\*|\.\.\/|\.\//i‘, $str1);
}

2、資料類型驗證

資料了類型就比較好判斷了, is_string()判斷是否是字串,is_numeric()判斷是否是數字;這裡需要注意一點,php是弱語言型程式設計語言,所以區分是否是數字和字串的時候需要注意一下,‘1‘和1其實是相等的, php會自動把數字型字串轉換成數字,但是如果在‘1‘外面套上雙引號如"‘1‘"這樣,它就是字串了;在做過濾的時候切記, 不然很容易犯錯;

3、資料長度驗證

如果能確定你的傳入資料的長度,當然可以做一個簡單判斷, 不過一般情況直接使用Regex判斷, 不僅能匹配資料長度, 還能精確的匹配資料類型和參數格式等,所以Regex還是很方便高效的;

4、特殊字元替換

這個問題可能存在當使用者輸入‘,",%等的時候, sql誤以為是特殊字元,執行的時候語句就報錯或是查詢的結果不對;這就需要str_replace()函數做字串特定字元的替換,

比如str_resplace(‘‘‘,‘\‘‘,$str);,這樣就會把$str中的‘號轉成\‘;這樣sql在執行的時候就會把‘當做‘去處理,不然會以為是字串分界符;這樣就會報錯了,%其實也是一樣,%在sql中是模糊查詢,如果做了轉義處理,sql就會認為是%這個字元,不做模糊查詢處理;當然php也有函數去處理引號轉義處理的,addslashes()函數就是做這個事情的,另外php設定檔中有一個magic_quotes_gpc()這個配置如果設定為on,則php在接受參數的時候, 會自動的給‘,",\,null加上\進行轉義;具體詳細使用方法我這裡就不多說了, 前面的連結裡面也是有的, 百度也很容易查到;

先就總結這幾點吧 , 後面用到別的再加;

php mysql注入攻擊解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.