程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 魔術引號詳解講解

PHP 魔術引號詳解講解

編輯:關於PHP編程

         PHP之安全在於其默認配置php.ini-dist中具備一個magic_quotes_gpc = On的東西,叫“魔術引號(Magic Quote)”,對PHP初學者很有用,“盡管SQL注入在魔術引號打開的情況下仍然有可能實現,但起碼系統的風險減少很多了”(PHP手冊)。但是對於 PHP代碼的移植性卻造成了影響,而且並不是每一個被魔術引號轉義的數據都需要寫入數據庫,這樣就對程序的執行效率造成了影響,倒不如使用 addslashes(),所以在
php.ini-recommended中magic_quotes_gpc = Off。
        這裡用一段函數來判斷是否打開了magic_quotes_gpc,然後確定是否需要addslashes(),當然,這樣做可能效率會受到影響。

PHP系統配置文件php.ini中有三個魔術引號配置選項:

魔術引號配置選項 描述 運行時改變 PHP中的默認值 magic_quotes_gpc 如果打開的話,影響 到 HTTP 請求數據(GET,POST 和 COOKIE)。 NO On magic_quotes_runtime 如果打開的話,大部 份從外部來源取得數據並返回的函數,包括從數據庫和文本文件,所返回的數據都會被反斜線轉義。(前提是magic_quotes_gpc = On) YES Off magic_quotes_sybase 當關閉時,所有的 (單引號),"(雙引號),(反斜線)和 NULL 字符都會被自動加上一個反斜線進行轉義。這和 addslashes() 作用完全相同。
如果打開的話,將會使用單引號對單引號進行轉義而非反斜線。此選項會完全覆蓋 magic_quotes_gpc。如果同時打開兩個選項的話,單引號將會被轉義成 。而雙引號、反斜線 和 NULL 字符將不會進行轉義。
(前提是magic_quotes_gpc = On) YES Off
        從上表可以看出,對於magic_quotes_runtime,在程序中用 ini_set(magic_quotes_runtime, 0);就可以把它關掉,然後可以用自己的方法來處理來自數據庫或文件的數據。   
        但是要處理外部傳來的全局變量就比較麻煩了。下面的代碼可供使用,這裡將屏蔽magic_quotes_sybase,只是將引號之類的東西前面加上反斜線(),用於提交給MySql數據庫。
<?php
functionquotesOuterVars($var) {
    if(is_array($var)) {
        returnarray_map(quotesOuterVars,$var);
    }else{
        if(get_magic_quotes_gpc()) {
        // 如果 magic_quotes_sybase=On,我們先把 替換成 ,然後再addslashes
            if(ini_get(magic_quotes_sybase)) {
                $var = str_replace("", "",$var);
                $var=addslashes($var);
                }
            }else{
            $var=addslashes($var);
            }
        returntrim($var);
    }
}
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved