天天看點

php代碼審計中常見的ini配置

文章目錄

    • PHP的配置檔案
        • php.ini
        • .user.ini
    • PHP相關文法
    • 相關變量配置
        • 啟用全局變量
        • 短标簽
    • 安全模式
        • 安全模式下執行程式主目錄
        • 禁用類/函數
    • 上傳檔案及目錄權限
        • 設定上傳及最大上傳檔案大小:
        • 檔案上傳臨時目錄:
        • 使用者通路目錄限制:
    • 錯誤資訊
        • 錯誤資訊控制
        • 設定錯誤報告的級别
        • 錯誤日志

PHP的配置檔案

php.ini

這個配置檔案也可以是

php.版本号.ini

這個配置檔案在PHP啟動的時候會被讀取,對于伺服器子產品版本的PHP,僅僅在web伺服器啟動時讀取一次.而對于CGL和CLI版本的話,每次調用都會讀取。

CGL:通用網關接口,通用網關接口用于初始化軟體服務的伺服器方接口。這套接口描述了Web伺服器與同一計算機上的軟體的通信方式。

CLI:一般指指令行界面

  • Apache web伺服器在啟動時會把目錄轉到根目錄,這将導緻php在根目錄下讀取php.ini
  • php.ini中可以使用環境變量

還可以在

httpd.conf

中覆寫php.ini的值,以進行更靈活的配置:

php_value name value

;設定非bool型的指令,将value設為none則清除先前的設定

php_ flagname on|off

;僅用于設定bool型的指令

PHP常量(如

E_ALL

)僅能在php ini中使用,在

httpd.conf

中必須使用相應的掩碼值。

  • 帶"SYS"标志的指令隻能在

    httpd.conf

    中的全局配置部分使用
  • 帶"ini"标志的指令不能在

    httpd.conf

    中使用,它們僅能用于php.ini中。

.user.ini

自PHP 5.3.0起,PHP支援基于每個目錄的

.htaccess

風格的INI檔案。此類檔案僅被CGI/FastCGI SAPI處理。此功能使得PECL的htscanner跨站廢棄。如果使用Apache,則用

.htaccess

有相同效果

  • PHP的配置有不同的配置權限,不同的權限在不同的配置檔案是不一樣的。

.user.ini

風格的INI檔案中隻有具有

PHP_ INI_ PERDIR

PHP_ INI_ USER

模式的INI設定可被識别。

  • 當使用PHP作為Apache子產品時,也可以用Apache的配置檔案(例如

    httpd.conf

    )和

    .htaccess

    檔案中的指令來修改PHP的配置設定。需要有

    AllowOverride Options

    AllowOverride All

    權限。

PHP相關文法

空白字元,章節标題和以分号開始的行會被簡單的忽略

設定指令的格式:

directive = value

指令名(directive)大小寫敏感。

值(value)可以是:

①.用引号界定的字元串(如:“foo”)

②.一個數字(整數或浮點數,如:0, 1, 34, -1, 10.4)

③. 一個PHP常量(如:E_ID, M_IP)

④. 一個INI常量(On, Off, none)

⑤.一個表達式(如:E_ALL & ~E_NOTICE)

在INI檔案當中的表達式僅使用:

位運算符,邏輯非,圓括号,|位或,&位與,~位非,!邏輯非

一個空字元串可以用在等号後不寫任何東西表示或者用none關鍵字:

f = ;//将f設為空字元串
f = none ;//将f設為空字元串
f = “none” ;//将f設為空字元串"none"
           

如果你在指令值中使用動态擴充(PHP擴充或Zend擴充)中的常量,那麼就隻能在加載這些動态擴充的指令行之後使用這些常量。

相關變量配置

啟用全局變量

大部分情況為了安全是關閉全局變量的:

register_globals = off

當設定為on時,php會将

$_ POST, $ GET, $_ COOKIE, $ ENV,$ SESSION

數組中的

$key= > $value

直接注冊為變量,比如

$_ POST['username']

就會被注冊為

$username

。這樣容易引起變量之間互相覆寫,而且友善黑客進行攻擊。

短标簽

short_open_tag = On
           

這個的作用是決定是否允許使用PHP代碼開始的标志的縮寫形式(<??>)。如果禁用了,必須使用PHP代碼開始标志的完整形式( <?php?> )。

也會影響到縮寫形式

<?=

,它和

<? echo

等價。使用此縮寫需要

short open tag

的值為On。從PHP 5.4.0起,

<?=

總是可用的。

安全模式

安全模式下執行程式主目錄

safe_mode_exec_dir = /var/www/html

system和其他執行函數将拒不執行這個目錄中的程式

禁用類/函數

disable_classes = , disable_functions =

逗号分隔的函數名清單作為參數,隻能設定在php.ini中。

上傳檔案及目錄權限

設定上傳及最大上傳檔案大小:

file_uploads = on
upload_max_filesize = 8M
           

檔案上傳臨時目錄:

上傳臨時檔案儲存的目錄,需要可寫,如果不設定,則采用系統臨時目錄 .例 : (/tmp, C:\Windows\Temp)

使用者通路目錄限制:

使用open_basedir能控制php腳本通路指定的目錄,能夠避免php腳本通路不該通路的目錄,一般設定為隻能通路目前目錄,這有效防止php木馬跨站運作.

錯誤資訊

錯誤資訊控制

display_error = On
           

一定一定一定要設定為off,把錯誤資訊輸出給攻擊者,你的站不被打誰被打

當然調試的使用要用On,不然看不到錯誤資訊.

設定錯誤報告的級别

作用是将錯誤級别設定為最高,顯示所有的問題。

錯誤日志

錯誤日志的位置,必須對web使用者可寫入,如果不定義則預設寫入到web伺服器的錯誤日志中去。

log_errors = on
           

将錯誤的日志輸入到檔案,而不是直接輸出到前端。

錯誤日志關聯資訊的最大長度,設為0表示無限長度。