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_相關錯誤 用戶設置的相關錯誤
好了,今天分享就到這裏,大家繼續努力!!!