一個全面的PHP整站防注入程式

來源:互聯網
上載者:User

SQL注入攻擊的總體思路

·發現SQL注入位置;
·判斷後台資料庫類型;
·確定XP_CMDSHELL可執行情況
·發現WEB虛擬目錄
·上傳ASP,php,jsp木馬;
·得到管理員權限;


<?PHP
//PHP整站防注入程式,需要在公用檔案中require_once本檔案
//判斷magic_quotes_gpc狀態

 代碼如下 複製代碼
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//如果是數組,遍曆數組,遞迴調用
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函數來處理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}

1、整型參數的判斷

當輸入的參數YY為整型時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 欄位=YY,所以可以用以下步驟測試SQL注入是否存在。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一個單引號),此時abc.ASP中的SQL語句變成了
select * from 表名 where 欄位=YY’,abc.asp運行異常;
②HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1, abc.asp運行正常,而且與HTTP://xxx.xxx.xxx/abc.asp?p=YY運行結果相同;
③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp運行異常;
如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。

綜合上面我們寫一個整型過濾函數

 代碼如下 複製代碼

function num_check($id) {
if (! $id) {
die ( '參數不可為空!' );
} //是否為空白的判斷
else if (inject_check ( $id )) {
die ( '非法參數' );
} //注入判斷
else if (! is_numetic ( $id )) {
die ( '非法參數' );
}
//數字判斷
$id = intval ( $id );
//整型化
return $id;
}


//字元過濾函數
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法參數' );
}
//注入判斷
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
function search_check($str) {
$str = str_replace ( "_", "_", $str );
//把"_"過濾掉
$str = str_replace ( "%", "%", $str );
//把"%"過濾掉
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
//表單過濾函數
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '最少$min位元組' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max位元組' );
}
return stripslashes_array ( $str );
}

當輸入的參數YY為字串時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 欄位='YY',所以可以用以下步驟測試SQL注入是否存在。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一個單引號),此時abc.ASP中的SQL語句變成了
select * from 表名 where 欄位=YY’,abc.asp運行異常;
②HTTP://xxx.xxx.xxx/abc.asp?p=YY&;nb ... 39;1'='1', abc.asp運行正常,而且與HTTP://xxx.xxx.xxx/abc.asp?p=YY運行結果相同;
③HTTP://xxx.xxx.xxx/abc.asp?p=YY&;nb ... 39;1'='2', abc.asp運行異常;
如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。

 

 代碼如下 複製代碼

//防注入函數
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|'|/*|*|../|./|UNION|into|load_file|outfile', $sql_str );
// www.111cn.net 進行過濾,防注入
}

function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}

?>

好了文章介紹到的防注入也算是比較全面的,大家可以測試或更出更好的方法.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.