大連藍普科技有限公司提供的網站制作、網站建設、虛擬空間、域名注冊、網站外包、網站托管、企業郵箱服務值得信賴!
服務熱線:0411-39750801
藍普首頁 網站建設 網站案例 域名注冊 虛擬空間 網站優化 我色我攝 騰訊企業郵 淘寶攝影 微信營銷 多媒體 關于我們
當前位置:首頁 >> 公司資訊
網站建設-藍普資訊
php+mysql注入防范

防范可以從兩個方面著手,一個就是服務器,二個就是代碼本身,介紹服務器配置的文章很多了,無非就是把magic_quotes_gpc設置為 On,display_errors設置為Off,這里也就不在多說,既然本文接觸都是程序的問題,我們還是從程序本身尋找原因。
  如果說php比asp易用,安全,從內置的函數就可以體現出來。如果是整形的變量,只需使用一個intval()函數即可解決問題,在執行查詢之前,我們先處理一下變量,如下面的例子就是很安全的了:

$id = intval($id);
mysql_query("SELECT * FROM article WHERE articleid='$id'");

  或者這樣寫:

mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")

  不管如何構造,最終還是會先轉換為整形猜放入數據庫的。很多大型程序都是這樣寫,非常簡潔。
  字符串形的變量也可以用addslashes()整個內置函數了,這個函數的作用和magic_quotes_gpc一樣,使用后,所有的 ' (單引號), " (雙引號), / (反斜線) and 空字符會自動轉為含有反斜線的溢出字符。而且新版本的php,就算magic_quotes_gpc打開了,再使用addslashes()函數,也不會有沖突,可以放心使用。例子如下:

$username = addslashes($username);
mysql_query("SELECT * FROM members WHERE userid='$username'");

  或者這樣寫:

mysql_query("SELECT * FROM members WHERE userid=".addslashes($username)."")

  使用addslashes()函數還可以避免引號配對錯誤的情況出現。而模糊搜索方面,就直接把“_”、“%”轉換為“/_”“/%”就可以了,當然也不要忘記使用addslashes()函數。具體代碼如下:

$keywords = addslashes($keywords);
$keywords = str_replace("_","/_",$keywords);
$keywords = str_replace("%","/%",$keywords);

  不用像ASP那樣,過濾一點變量,就要寫一大堆的代碼,就是上面的一點點代碼,我們就可以把本文所有的問題解決了,是不是很簡便?

 

再COPY過來幾個函數,用得到的時候再改改:

/*   
函數名稱:inject_check()   
函數作用:檢測提交的值是不是含有SQL注射的字符,防止注射,保護服務器安全   
參  數:$sql_str: 提交的變量   
返 回 值:返回檢測結果,ture or false   
*/    
function inject_check($sql_str) {     
   return eregi('select|insert|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;     
}

合乐分分彩一天多少期