PHP禁止頁面緩存輸出
對于 Magic quotes,對于 PHPer 而言是個老生常談的問題。今天無意間看到篇文章,結合PHP Manual以及其回復,在這里做個簡單的匯總。
簡而言之,Magic quotes 開啟后會自動轉義輸入的數(shù)據(jù)。其中,所有的單引號(')、雙引號(')、反斜線、和 NULL 字符都會被轉義(增加個反斜線),其實這操作本質上調用的是 addslashes 函數(shù)。
為什么使用 Magic quotes方便快捷PHP 的設計者在設計之初的構想就是能夠快速方便的編程。例如插入數(shù)據(jù)庫時,Magic quotes 會自動將數(shù)據(jù)轉義,這很方便。
對初學者有利Magic quotes 可以從一定程度上,讓初學者帶離腳本的安全風險。例如在沒有任何保護措施的代碼下,開啟了 Magic quotes 后會少很多的風險,例如注入問題。當然,單一使用此方法,并不能完全阻止此類安全問題。
“我沒有權限去關閉”很顯然你已經(jīng)可能意識到了這個問題,但是主機空間并非完全由自己控制。
為什么不使用 Magic quotes可移植性無論此功能是否開啟,它都會影響腳本的可移植性,因為它影響我們后續(xù)過濾數(shù)據(jù)的操作。
性能問題在獲取所有的外部數(shù)據(jù)之前都會被轉義,這無疑會增加運行時的花銷(而且并不是所有的數(shù)據(jù)都需要轉義)。
造成困惑正如上述所言,并非所有的數(shù)據(jù)都需要被轉義。有可能出現(xiàn)的一種情況,就是當你為了獲取未被轉義的數(shù)據(jù),而“瘋狂的”使用 stripslashes 函數(shù)。
PHP6 已經(jīng)不支持PHP 的設計者顯然已經(jīng)意識到了自己的“錯誤”,所以在 PHP6 中已經(jīng)將其廢棄。
如何禁用 Magic quotes按照本人觀點,使用 php.ini 配置文件全局禁用 Magic quotes 是最靠譜的。參考下面的代碼
Magic quotesMagic quotes for incoming GET/POST/Cookie data.magic_quotes_gpc = Off; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.magic_quotes_runtime = Off; Use Sybase-style magic quotes (escape ' with '' instead of ').magic_quotes_sybase = Off然而線上的主機可能無法讓你修改 php.ini 文件,那么可以使用 .htaccess 文件禁用,加入下面的代碼
php_flag magic_quotes_gpc Off上述可移植的代碼而言,無論是否禁用 magic_quotes,數(shù)據(jù)必須保持一致。那么下面的代碼可以幫助您
<?phpif (get_magic_quotes_gpc()) {function stripslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $value;}$_GET;;= array_map('stripslashes_deep', $_GET);$_POST;= array_map('stripslashes_deep', $_POST);$_COOKIE; = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep', $_REQUEST);}
