PHP核心配置詳解

前言

代碼在不同的環境下執行的結果也會有大不同,可就就是因爲一個配置問題,導致一個非常高危的漏洞被利用;也可能困擾你半天的問題是因爲一個小小的配置引起的;因此我們必須要儘可能的熟悉PHP各個版本中配置代表的含義,才能提高代碼開發質量。

PHP_INI_*常量的定義

常量 含義
PHP_INI_USER 該配置選項可在用戶的PHP腳本中註冊
PHP_INI_PERDIR 該配置選項可在php.ini .htaccess 或者 http.conf中設置
PHP_INI_SYSTEM 該配置選項可在php.ini 或者 httpd.conf中配置
PHP_INI_ALL 該配置選項可在任何可以可以配置的地方設置
php.ini only 該配置選項僅可在php.ini中設置

1.register_globals(全局變量註冊開關)

該配置如果設置爲“on”,會直接把客戶端傳的參數註冊爲全局變量並出示爲所傳參數的值,如:GET,POST等。

參見如下代碼,同時使用http://localhost/index.php?user=admin進行訪問,可以看到結果爲true

if ($user == 'admin'){
    var_dump(true);die;
}
var_dump(false);
# 此配置在PHP版本<=4.2時可用,在PHP5.3之後被廢棄,5.4之後徹底移除

2.allow_url_include(是否允許包含遠程文件)

這個配置指令對PHP安全的影響不容小覷。在該配置爲 “on” 的情況下,PHP腳本可以直接包含遠程文件,並執行文件內的PHP命令。參見如下代碼,然後訪問服務器B,可以看到結果輸出爲這個是文件A

<?php
// 文件A,放在服務器A上
echo "這個是文件A";
>?

<?php
// 文件B,放在服務器B上
include "服務器A的地址/文件A.php";
echo "\n結束";
?>

3.magic_qutoes_gpc(魔術引號自動過濾)

這項配置還是挺好的。只要此配置開啓,會自動在GET、POST、GOOKIE變量中的單引號、雙引號、反斜槓以及空字符的前面加上反斜槓(),但並不會過濾$_SERVER變量,導致很多相關的內容,有可能被漏洞利用。具體效果可參見如下代碼,http://localhost:index.php?seay=1'執行後可見到結果爲1\'

<?php
echo $_GET['seay'];
?>

4.magic_qutoes_runtimes(魔術引號自動過濾)

這項配置也是對數據進行過濾,但是和上面magic_qutoes_gpc不同的是,這項配置主要是過濾從文件或者數據庫中提取出來的數據。

5.magic_qutoes_sybase(魔術引號自動過濾)

此項配置同樣是對數據進行過濾,同樣和上面兩項有不同。此項配置同樣過濾$_GET、POST、COOKIE等變量,不同點在於它會將單引號轉化爲雙引號。參見如下代碼,通過訪問http://localhost:index.php?seay=1',可看到結果爲1"

<?php
echo $_GET['seay'];
?>

6.safe_mode (安全模式)

安全模式是PHP內置的的一種安全機制。當safe_mode設置爲 on 時,所有文件操作的函數都會受到限制。
例如:文件A和文件C屬於用戶A,文件B屬於用戶B,那麼在用戶A執行文件B的時候回報錯“Cannot execute useing backqutoes in Safe Mode in line 行數”

7.open_basedir (PHP可訪問目錄)

相信大家肯定都碰到過open_basedir(…)的錯誤信息。這是由於你要操作的目錄不在此項配置下。

8.disable_functions (禁用函數)

在正式的生產環境中,爲了更安全地運行PHP,也可以使用disable_functions指令來禁止一些敏感函數的使用。比如dl()。因爲攻擊者可能利用dl()函數來加載自定義的PHP擴展來進行攻擊
本指令配置的範圍爲php_ini only

9.display_errors 和 error_reporting(PHP錯誤顯示)

此配置選項表示,是否顯示程序運行中的錯誤信息。一般在開發調試中會打開此項配置,但是到生產環境後就要關閉此項配置了,避免一些安全隱患。
此配置項分爲

Deprecated 最低級別錯誤,程序繼續執行

Notice 通知級別的錯誤 如直接使用未聲明變量,程序繼續執行

Warning 警告級別的錯誤,可能得不到想要的結果

Fatal error  致命級別錯誤致命級別錯誤,程序不往下執行

parse error 語法解析錯誤,最高級別錯誤,連其他錯誤信息也不呈現出來

E_USER_相關錯誤 用戶設置的相關錯誤

好了,今天分享就到這裏,大家繼續努力!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章