PHP整站防注入程序
htmlspecialchars無(wú)法防注入
本函數(shù)將特殊字符轉(zhuǎn)成 HTML 的字符串格式 ( &....; )。至常用到的場(chǎng)合可能就是處理客戶留言的留言版了。
* &- ---- 轉(zhuǎn)成 &
* " ---- 轉(zhuǎn)成 "
* < ---- 轉(zhuǎn)成 <
* > ---- 轉(zhuǎn)成 >
很多程序用它做用戶名過(guò)濾,本函數(shù)沒(méi)過(guò)濾 ' , 空格 ( ) ; 所以SQLi仍然可以。
PHP整站防注入程序,需要在公共文件中require_once本文件,因?yàn)楝F(xiàn)在網(wǎng)站被注入攻擊現(xiàn)象很?chē)?yán)重,所以推薦大家使用
<?PHP
//PHP整站防注入程序,需要在公共文件中require_once本文件
//判斷magic_quotes_gpc狀態(tài)
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//如果是數(shù)組,遍歷數(shù)組,遞歸調(diào)用
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函數(shù)來(lái)處理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
//整型過(guò)濾函數(shù)
function num_check($id) {
if (! $id) {
die ( '參數(shù)不能為空!' );
} //是否為空的判斷
else if (inject_check ( $id )) {
die ( '非法參數(shù)' );
} //注入判斷
else if (! is_numetic ( $id )) {
die ( '非法參數(shù)' );
}
//數(shù)字判斷
$id = intval ( $id );
//整型化
return $id;
}
//字符過(guò)濾函數(shù)
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法參數(shù)' );
}
//注入判斷
$str = htmlspecialchars ( $str );
//轉(zhuǎn)換html
return $str;
}
function search_check($str) {
$str = str_replace ( "_", "\_", $str );
//把"_"過(guò)濾掉
$str = str_replace ( "%", "\%", $str );
//把"%"過(guò)濾掉
$str = htmlspecialchars ( $str );
//轉(zhuǎn)換html
return $str;
}
//表單過(guò)濾函數(shù)
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '至少$min字節(jié)' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '至多$max字節(jié)' );
}
return stripslashes_array ( $str );
}
//防注入函數(shù)
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str );
// www.jb51.net 進(jìn)行過(guò)濾,防注入
}
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;
}
?>