久艹视频免费看,亚洲成av人综合在线观看,51久久夜色精品国产水果派解说,gogo全球大胆高清人体444

知識(shí)學(xué)堂
  • ·聯(lián)系電話(huà):+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時(shí)手機(jī):13896886023
  • ·QQ 咨 詢(xún):361652718 513960520
當(dāng)前位置 > 首頁(yè) > 知識(shí)學(xué)堂 > 常見(jiàn)技術(shù)問(wèn)題
php通用防注入類(lèi)
更新時(shí)間:2012-03-28 | 發(fā)布人:本站 | 點(diǎn)擊率:356
<?php
/*************************
說(shuō)明:
判斷傳遞的變量中是否含有非法字符
如$_POST、$_GET
功能:
防注入
注:請(qǐng)自行完善要過(guò)濾的非法字符
**************************/




//要過(guò)濾的非法字符
$ArrFiltrate=array("'",";","union");
//出錯(cuò)后要跳轉(zhuǎn)的url,不填則默認(rèn)前一頁(yè)
$StrGoUrl="#";
//是否存在數(shù)組中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}




//合并$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($_POST,$_GET);
}else{
foreach($_POST as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($_GET as $key=>$value){
$ArrPostAndGet[]=$value;
}
}




//驗(yàn)證開(kāi)始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "<script language="javascript">alert("非法字符");</script>";
if (empty($StrGoUrl)){
echo "<script language="javascript">history.go(-1);</script>";
}else{
echo "<script language="javascript">window.location="".$StrGoUrl."";</script>";
}
exit;
}
}




/**
附注:$HTTP_POST_VARS與$_POST的區(qū)別
$HTTP_GET_VARS與$_GET   $HTTP_POST_VARS與$_POST




$HTTP_POST_VARS可以用于3.0及以下版本,$HTTP_POST_VARS不是自動(dòng)全局變量




$_POST只能用于4.0及以上版本中




為了你的代碼應(yīng)用可以更廣泛,請(qǐng)寫(xiě)成$HTTP_POST_VARS








HTTP POST 變量:$_POST
注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_POST_VARS。




通過(guò) HTTP POST 方法傳遞的變量組成的數(shù)組。是自動(dòng)全局變量。




這是一個(gè)“superglobal”,或者可以描述為自動(dòng)全局變量。這只不過(guò)意味這它在所有的腳本中都有效。在函數(shù)或方法中您不需要使用 global $_POST; 來(lái)訪(fǎng)問(wèn)它,就如同使用 $HTTP_POST_VARS 一樣。




$HTTP_POST_VARS 包含著同樣的信息,但是不是一個(gè)自動(dòng)全局變量。(注意: HTTP_POST_VARS 和 $_POST 是不同的變量,PHP 處理它們的方式不同。)
**/












PHP防注入方法二(以下代碼未經(jīng)測(cè)試,請(qǐng)自行按需修改。
以下是一段copy來(lái)的代碼:








$_POST = sql_injection($_POST);
$_GET = sql_injection($_GET);




function sql_injection($content)
{
if (!get_magic_quotes_gpc()) {
if (is_array($content)) {
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
addslashes($content);
}
}
return $content;
}









做系統(tǒng)的話(huà),可以用下面的代碼,也是copy來(lái)的。接下來(lái)做系統(tǒng)的時(shí)候,如果有問(wèn)題,或者有修改的地方,我會(huì)補(bǔ)充說(shuō)明:




/*
函數(shù)名稱(chēng):inject_check()
函數(shù)作用:檢測(cè)提交的值是不是含有SQL注射的字符,防止注射,保護(hù)服務(wù)器安全
參  數(shù):$sql_str: 提交的變量
返 回 值:返回檢測(cè)結(jié)果,ture or false
*/
function inject_check($sql_str) {
return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // 進(jìn)行過(guò)濾
}

/*
函數(shù)名稱(chēng):verify_id()
函數(shù)作用:校驗(yàn)提交的ID類(lèi)值是否合法
參  數(shù):$id: 提交的ID值
返 回 值:返回處理后的ID
*/
function verify_id($id=null) {
if (!$id) { exit('沒(méi)有提交參數(shù)!'); } // 是否為空判斷
elseif (inject_check($id)) { exit('提交的參數(shù)非法!'); } // 注射判斷
elseif (!is_numeric($id)) { exit('提交的參數(shù)非法!'); } // 數(shù)字判斷
$id = intval($id); // 整型化

return $id;
}

/*
函數(shù)名稱(chēng):str_check()
函數(shù)作用:對(duì)提交的字符串進(jìn)行過(guò)濾
參  數(shù):$var: 要處理的字符串
返 回 值:返回過(guò)濾后的字符串
*/
function str_check( $str ) {
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否打開(kāi)
$str = addslashes($str); // 進(jìn)行過(guò)濾
}
$str = str_replace("_", "\_", $str); // 把 '_'過(guò)濾掉
$str = str_replace("%", "\%", $str); // 把 '%'過(guò)濾掉

return $str;
}

/*
函數(shù)名稱(chēng):post_check()
函數(shù)作用:對(duì)提交的編輯內(nèi)容進(jìn)行處理
參  數(shù):$post: 要提交的內(nèi)容
返 回 值:$post: 返回過(guò)濾后的內(nèi)容
*/
function post_check($post) {
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否為打開(kāi)
$post = addslashes($post); // 進(jìn)行magic_quotes_gpc沒(méi)有打開(kāi)的情況對(duì)提交數(shù)據(jù)的過(guò)濾
}
$post = str_replace("_", "\_", $post); // 把 '_'過(guò)濾掉
$post = str_replace("%", "\%", $post); // 把 '%'過(guò)濾掉
$post = nl2br($post); // 回車(chē)轉(zhuǎn)換
$post = htmlspecialchars($post); // html標(biāo)記轉(zhuǎn)換

return $post;
}
?>