PHP 5.4 或以上重現 Register Globals

很久以前的 PHP 預設開啟 Register Globals 選項, 這樣寫程式就很方便, 但這個方便也帶來安全性問題, 所以後來 PHP 預設會將 Register Globals 關閉, 對於一些要開啟 Register Globals 的程式, 在不修改程式碼的情況下, 還可以透過修改 php.ini 或 .htaccess 的方法解決。

但在 PHP 5.4 開始, PHP 開發團隊將 Register Globals 刪除, 所以很多要靠開啟 Register Globals 才能執行的程式, 在 PHP 5.4 或以後的版本便失效了, 我知道有些主機是為了讓舊 PHP 程式執行, 會不顧安全風險, 編譯舊版的 PHP 使用。

當然最好的方法還是修改舊有 PHP 程式碼, 不用靠 Register Globals 也能執行, 但修改程式碼也要花一點時間, 以下分享一個不用修改程式碼的解決方法, 對需要在短時間解決 Register Globals 問題是很好的臨時方案。

先在網頁目錄建立一個 PHP 檔案, 以下取名為 globals.php, 加入以下內容:

然後建立 .htaccess 檔案, 如果而經有 .htaccess, 可以直接開啟, 加入以下內容:

以上 .htaccess 的設定, 看到設定了 PHP 的 auto_prepend_file 選項, 指定網頁目錄下所以 PHP 程式在執行時, 會先載入 globals.php 檔案, 效果等同在每個 PHP 檔案加入一句 include ‘globals.php’ 一樣。

然後該目錄下的檔案便可以使用 Register Globals 的方法使用變數。




Leave a Reply