熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php防止sql注入的函數介紹

2013-11-15 12:30:57  來源: PHP編程 

  具體用法

  addslashes防止SQL注入

  雖然國內很多PHP程序員仍在依靠addslashes防止SQL注入還是建議大家加強中文防止SQL注入的檢查addslashes的問題在 於黑客 可以用xbf來代替單引號而addslashes只是將xbf修改為xbfc成為一個有效的多字節字符其中的xbfc仍會 被看作是單引號所以addslashes無法成功攔截

  當然addslashes也不是毫無用處它是用於單字節字符串的處理多字節字符還是用mysql_real_escape_string吧

  另外對於php手冊中get_magic_quotes_gpc的

  舉例

代碼如下  

  
<?php
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 = nlbr($post); // 回車轉換
$post= htmlspecialchars($post); // html標記轉換
return $post;
}
?>

  或

  <?php
function inject_check($sql_str)
{
return eregi(select|insert|update|delete||
function verify_id($id=null)
{
if (!$id) { exit(沒有提交參數!); } // 是否為空判斷
elseif (inject_check($id)) { exit(提交的參數非法!); } // 注射判斷
elseif (!is_numeric($id)) { exit(提交的參數非法!); } // 數字判斷
$id = intval($id); // 整型化
return $id;
}
?>

  string mysql_real_escape_string ( string $unescaped_string [ resource $link_identifier ] )

  本函數將 unescaped_string 中的特殊字符轉義並計及連接的當前字符集因此可以安全用於 mysql_query()

  Note: mysql_real_escape_string() 並不轉義 % 和 _

  mysql_real_escape_string

  Example# mysql_real_escape_string() 例子

代碼如下  

  <?php
$item = "Zaks and Dericks Laptop" ;
$escaped_item = mysql_real_escape_string ( $item );
printf ( "Escaped string: %sn" $escaped_item );
?>

  以上例子將產生如下輸出

  Escaped string: Zaks and Dericks Laptop

  mysql_escape_string

  本函數將 unescaped_string 轉義使之可以安全用於 mysql_query()

  注: mysql_escape_string() 並不轉義 % 和 _

  本函數和 mysql_real_escape_string() 完全一樣除了 mysql_real_escape_string() 接受的是一個連接句柄並根據當前字符集轉移字符串之外mysql_escape_string() 並不接受連接參數也不管當前字符集設定

  例子 mysql_escape_string() 例子

代碼如下  

  <?php
$item = "Zaks Laptop";
$escaped_item = mysql_escape_string($item);
printf ("Escaped string: %sn" $escaped_item);
?>
輸出
Escaped string: Zaks Laptop

  mysql_real_escape_string和mysql_escape_string這個函數的區別

  mysql_real_escape_string 必須在(PHP >= PHP )的情況下才能使用否則只能用 mysql_escape_string 兩者的區別是mysql_real_escape_string 考慮到連接的當前字符集而mysql_escape_string 不考慮

  我們可以利用判斷來綜合處理

代碼如下   function cleanuserinput($dirty){
if (get_magic_quotes_gpc()) {
$clean = mysql_real_escape_string(stripslashes($dirty));
}else{
$clean = mysql_real_escape_string($dirty);
}
return $clean;
}

  總結一下

  * addslashes() 是強行加;

  * mysql_real_escape_string() 會判斷字符集但是對PHP版本有要求;

  * mysql_escape_string不考慮連接的當前字符集


From:http://tw.wingwit.com/Article/program/PHP/201311/21094.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.