11月 24, 2010

register_globals於PHP6後不支援之排除法

在最近升級PHP至5.3後,發現都會有一個警告


Warning: Directive register_globals is deprecated in PHP 5.3 and greater in Unknown on line 0


去查了一下才知,原來PHP 中最具爭議的變化就是從 PHP 4.2.0 版開始配置檔中 register_globals 的預設值從 on 改為 off 了,而在5.3版本後就會顯示警告,但還是能開啟使用,但在PHP 6 之後就會全面停用。

哈~因為有register_globals,所以小弟覺得各家程式語言之中,PHP最強大,因為程式隨便寫都能執行~^^||
也可以設定成不用接參數,到了下一頁自動會轉成變數,這對開發者來說是省了不少功夫,不過也是因為如此,所以程式就不夠嚴謹,而且還會有安全性的問題,所以還是乖乖使用比較正統的方式寫CODE 吧 ~><~

註:如果想知道為何會不安全,請看以下連結說明:


http://por.tw/Website_Design/PHP5/security.globals.html

除了 register_globals之外,當然也還有幾個參數也準備廢除,如下:


register_long_arrays
magic_quotes_gpc

magic_quotes_gpc這參數也頂棒的~可以不用去管是不是要加反斜線~唉~這也是安全性的考量要拿掉嗎? 怪的~去查了一下,拿掉主要因素不一樣啦~~是因為會影響程式造成可移移植性低、效能問題及容易造成困惑,詳細請看以下的文章:


http://www.ihacklog.com/php/security_optimization/magic_quotes_gpc-and-safe_mode-in-php.html


不過這些參數,舊程式蠻都有介由他們進行自動轉換,沒了程式不就要大改了..呵~~好在還有偷吃步的方式,在 register_globals=Off的情況下,還是可以用以下程式碼達到同等效果。


<?php
if (!ini_get('register_globals'))
{
extract($_POST);
extract($_GET);
extract($_SERVER);
extract($_FILES);
extract($_ENV);
extract($_COOKIE);
if ( isset($_SESSION) )
{
extract($_SESSION);
}
}
?>

這樣只要加到會include的共用頁這樣就升級程式支援該參數被關掉了~^^
而magic_quotes_gpc被關掉也有解法,有興趣的人可以看剛剛上面那個連結,只是沒這個好改了!!

沒有留言: