最近在做一個主題投票網站,客戶懂一些程式方面的東西。有特別要求需要過濾一些字元防止sql注入。本來這方面就沒有特別的研究過。呵呵,又發揚了一回拿來主義。把discuz論壇的sql防注入函數取了!
複製程式碼 程式碼如下:
$magic_quotes_gpc = get_magic_quotes_gpc();; );
@extract(daddslashes($_POST));
@extract(daddslashes($_GET));
if(!$magic_quotes_gpc) {
$_FILES = daddslashes($_FI);
}
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;
}
複製程式碼 程式碼如下:
/*
函數名稱: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('提交的參數非法!名稱: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;
}
以上就介紹了 discuz的php防止sql注入函數,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。