SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程式,而這些輸入大都是SQL文法裡的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。
根據相關技術原理,SQL注入可以分為平台層注入和代碼層注入。前者由不安全的資料庫配置或資料庫平台的漏洞所致;後者主要是由於程式員對輸入未進行細緻地過濾,從而執行了非法的資料查詢。基於此,SQL注入的產生原因通常表現在以下幾方面:①不當的類型處理;②不安全的資料庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤逸出字元處理不合適;⑥多個提交處理不當。
本篇文章主要介紹一個通用的防注入代碼,代碼如下:
function jk1986_checksql() { $bad_str = "and|select|update|'|delete|insert|*"; $bad_Array = explode("|",$bad_str); /** 過濾Get參數 **/ foreach ($bad_Array as $bad_a) { foreach ($_GET as $g) { if (substr_count(strtolower($g),$bad_a) > 0) { echo "<script>alert('詭異字元,請不要嘗試注入本站! 作者:Jk1986 QQ:414028660');location.href='index.php';</script>"; exit(); } } } /** 過濾Post參數 **/ foreach ($bad_Array as $bad_a) { foreach ($_POST as $p) { if (substr_count(strtolower($p),$bad_a) > 0) { echo "<script>alert('詭異字元,請不要嘗試注入本站! 作者:Jk1986 QQ:414028660');location.href='index.php';</script>"; exit(); } } } /** 過濾Cookies參數 **/ foreach ($bad_Array as $bad_a) { foreach ($_COOKIE as $co) { if (substr_count(strtolower($co),$bad_a) > 0) { echo "<script>alert('詭異字元,請不要嘗試注入本站! 作者:Jk1986 QQ:414028660');location.href='index.php';</script>"; exit(); } } } }