php get_magic_quotes_gpc()函數是有什麼作用?
前面給講解php stripslashes()函數和addslashes()函數的區別的時候,裡面提到了get_magic_quotes_gpc()函數,那麼這個函數是幹嘛的呢?本章將介紹一下get_magic_quotes_gpc()
函數的一些說明及其至於事項。
get_magic_quotes_gpc函數的作用是:用來判斷是否為使用者提供的資料增加斜線了,這個在php.ini設定檔中,下面就詳細介紹一下get_magic_quotes_gpc()函數。
get_magic_quotes_gpc函數介紹
取得 PHP 環境變數 magic_quotes_gpc 的值,屬於 PHP 系統功能。
文法:
long get_magic_quotes_gpc(void);
傳回值: 長整數
本函數取得 PHP 環境配置的變數 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關閉本功能;返回 1 表示本功能開啟。當 magic_quotes_gpc 開啟時,所有的 ' (單引號), " (雙引號), (反斜線) and Null 字元會自動轉為含有反斜線的溢出字元。
在php的設定檔中,有個布爾值的設定,就是magic_quotes_runtime。當它開啟時,php的大部分函數自動的給從外部引入的(包括資料庫或者檔案)資料中的溢出字元加上反斜線。 當然如果重複給溢出字元加反斜線,那麼字串中就會有多個反斜線,所以這時就要用set_magic_quotes_runtime()與get_magic_quotes_runtime()設定和檢測php.ini檔案中magic_quotes_runtime狀態。
為了使自己的程式不管伺服器是什麼設定都能正常執行。可以在程式開始用get_magic_quotes_runtime檢測該設定的狀態決定是否要手工處理,或者在開始(或不需要自動轉義的時候)用set_magic_quotes_runtime(0)關掉該設定。
magic_quotes_gpc設定是否自動為GPC(get,post,cookie)傳來的資料中的'"\加上反斜線。可以用get_magic_quotes_gpc()檢測系統設定。如果沒有開啟這項設定,可以使用addslashes()函數添加,它的功能就是給資料庫查詢語句等的需要在某些字元前加上了反斜線。這些字元是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字元)。
PS:PHP 5.3.0 起廢棄並將自 PHP 5.4.0 起移除。PHP6中刪除了這個選項,一切的編程都需要在magic_quotes_gpc=Off下進行了。在這樣的環境下如果不對使用者的資料進行轉義,後果不僅僅是程式錯誤而已了。同樣的會引起資料庫被注入攻擊的危險。所以從現在開始大家都不要再依賴這個設定為On了,以免有一天你的伺服器需要更新到PHP6而導致你的程式不能正常工作。
樣本
php 判斷是否開啟get_magic_quotes_gpc功能了,以方便我們是否決定使用addslashes這個函數了。
function SQLString($c, $t){ $c=(!get_magic_quotes_gpc())?addslashes($c):$c; switch($t){ case 'text': $c=($c!='')?"'".$c."'":'NULL'; break; case 'search': $c="'%%".$c."%%'"; break; case 'int': $c=($c!='')?intval($c):'0'; break; } return $c;}
利用 get_magic_quotes_gpc()預防資料庫攻擊的正確做法
代碼如下
<?phpfunction check_input($value){// 去除斜杠if (get_magic_quotes_gpc()){$value = stripslashes($value);}// 如果不是數字則加引號if (!is_numeric($value)){$value = “‘” . mysql_real_escape_string($value) . “‘”;}return $value;}$con = mysql_connect(“localhost”, “hello”, “321″);if (!$con){die(‘Could not connect: ‘ . mysql_error());}// 進行安全的 SQL$user = check_input($_POST['user']);$pwd = check_input($_POST['pwd']);$sql = “SELECT * FROM users WHEREuser=$user AND password=$pwd”;mysql_query($sql);mysql_close($con);?>
總結:get_magic_quotes_gpc()函數的作用就是得到環境變數magic_quotes_gpc的值。切記在PHP6中刪除了magic_quotes_gpc這個選項,所以PHP6中這個函數已經不複存在了。