眾多開源系統使用的過濾SQL隱碼攻擊函式

y0umer發表於2012-11-16
$magic_quotes_gpc = get_magic_quotes_gpc(); 
@extract(daddslashes($_COOKIE)); 
@extract(daddslashes($_POST)); 
@extract(daddslashes($_GET)); 
if(!$magic_quotes_gpc) { 
$_FILES = daddslashes($_FILES); 
} 


function daddslashes($string, $force = 0) { 
if(!$GLOBALS[`magic_quotes_gpc`] || $force) { 
if(is_array($string)) { 
foreach($string as $key => $val) { 
$string[$key] = daddslashes($val, $force); 
} 
} else { 
$string = addslashes($string); 
} 
} 
return $string; 
} 
 

大家可以增強下面的程式碼加以保護伺服器的安全,PHP防止SQL隱碼攻擊安全函式十分重要!

/* 
函式名稱:inject_check() 
函式作用:檢測提交的值是不是含有SQL注射的字元,防止注射,保護伺服器安全 
參  數:$sql_str: 提交的變數 
返 回 值:返回檢測結果,ture or false 
*/ 
function inject_check($sql_str) { 
return eregi(`select|insert|and|or|update|delete|`|/*|*|../|./|union|into|load_file|outfile`, $sql_str); // 進行過濾 
} 

/* 
函式名稱:verify_id() 
函式作用:校驗提交的ID類值是否合法 
參  數:$id: 提交的ID值 
返 回 值:返回處理後的ID 
*/ 
function verify_id($id=null) { 
if (!$id) { exit(`沒有提交引數!`); } // 是否為空判斷 
elseif (inject_check($id)) { exit(`提交的引數非法!`); } // 注射判斷 
elseif (!is_numeric($id)) { exit(`提交的引數非法!`); } // 數字判斷 
$id = intval($id); // 整型化 

return $id; 
} 

/* 
函式名稱:str_check() 
函式作用:對提交的字串進行過濾 
參  數:$var: 要處理的字串 
返 回 值:返回過濾後的字串 
*/ 
function str_check( $str ) { 
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否開啟 
$str = addslashes($str); // 進行過濾 
} 
$str = str_replace("_", "\_", $str); // 把 `_`過濾掉 
$str = str_replace("%", "\%", $str); // 把 `%`過濾掉 

return $str; 
} 

/* 
函式名稱:post_check() 
函式作用:對提交的編輯內容進行處理 
參  數:$post: 要提交的內容 
返 回 值:$post: 返回過濾後的內容 
*/ 
function post_check($post) { 
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否為開啟 
$post = addslashes($post); // 進行magic_quotes_gpc沒有開啟的情況對提交資料的過濾 
} 
$post = str_replace("_", "\_", $post); // 把 `_`過濾掉 
$post = str_replace("%", "\%", $post); // 把 `%`過濾掉 
$post = nl2br($post); // 回車轉換 
$post = htmlspecialchars($post); // html標記轉換 

return $post; 
} 


相關文章