(一)mysql_real_escape_string 轉(zhuǎn)義sql語句中使用的字符串中的特殊字符,并考慮到連接的當(dāng)前字符集
使用方法如下:
$sql="select count(*) as ctr from users where username='".mysql_real_escape_string($username)."' and password='".mysql_real_escape_string($pw)."' limit 1";
使用mysql_real_escape_string()作為用戶輸入的包裝器,就可以避免用戶輸入中的惡意sql注入。
(二)打開magic_quotes_gpc來防止sql注入
php.ini中有一個(gè)設(shè)置:magic_quotes_gpc=o
這個(gè)默認(rèn)是關(guān)閉的,打開后將自動(dòng)把用戶提交的對(duì)sql的查詢進(jìn)行轉(zhuǎn)換,比如把'轉(zhuǎn)換為\'等,對(duì)于防止sql注入有中的作用。
如果magix_quotes_gpc=off,則使用addslashes()函數(shù)。
(三)自定義函數(shù)
function inject_check($sql_str){
return eregi('select | insert | and | or | update | delete | \' | \/\* | \* | \.\.\/ | \.\/ | union | into | load_file | outfile', $sql_str);
}
function verify_id($id=null){
if($id){
exit('沒有提交參數(shù)!');
} else if(inject_check($id)){
exit('提交的參數(shù)非法!');
} else if(!is_numeric($id)){
exit('提交的參數(shù)非法!');
}
$id = intval($id);
return $id;
}
function str_check($str){
if(!get_magic_quotes_gpc()){
$str=addslashes($str);
}
$str=str_replace("_","\_",$str);
$str=str_replace("%","\%",$str);
return $str;
}
function post_check($post){
if(!get_magic_quotes_gpc()){
$post=addslashes($post);
}
$post=str_replace("_","\_",$post);
$post=str_replace("%","\%",$post);
$post=n12br($post);
$post=htmlspecialchars($post);
return $str;
}