萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中的安全模式是指的什麼?

PHP中的安全模式是指的什麼?

手冊如是說:
章 24. 安全模式
目錄
被安全模式限制或屏蔽的函數
php 的安全模式是為了試圖解決共享服務器(shared-server)安全問題而設立的。在結構上,試圖在 php 層上解決這個問題是不合理的,但修改 web 服務器層和操作系統層顯得非常不現實。因此許多人,非凡是 isp,目前使用安全模式。


表格 24-1. 控制安全模式的設置選項有:

設置選項 默認值
safe_mode off
safe_mode_gid 0
safe_mode_include_dir ""
safe_mode_exec_dir 1
open_basedir ""
safe_mode_allowed_env_vars php_
safe_mode_protected_env_vars ld_library_path
disable_functions ""


當 safe_mode 設置為 on,php 將檢查當前腳本的擁有者是否和將被文件函數操作的文件的擁有者相匹配。例如: -rw-rw-r-- 1 rasmus rasmus 33 jul 1 19:20 script.php
-rw-r--r-- 1 root root 1116 may 26 18:01 /etc/passwd

運行 script.php <?php
readfile('/etc/passwd');
?>

假如安全模式被激活,則將會導致以下錯誤: warning: safe mode restriction in effect. the script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2



同時,或許會存在這樣的環境,在該環境下,寬松的 gid 檢查已經足夠,但嚴格的 uid 檢查反而是不適合的。您可以用 safe_mode_gid 選項來控制這種檢查。假如設置為 on 則進行寬松的 gid 檢查;設置為 off(默認值)則進行 uid 檢查。

除了 safe_mode 以外,假如您設置了 open_basedir 選項,則所有的文件操作將被限制在您指定的目錄下。例如: <directory /docroot>
php_admin_value open_basedir /docroot
</directory>

假如您在設置了 open_basedir 選項後運行同樣的 script.php,則其結果會是: warning: open_basedir restriction in effect. file is in wrong directory in
/docroot/script.php on line 2



您也可以單獨地屏蔽某些函數。請注重 disable_functions 選項不能在 php.ini 文件外部使用,也就是說您無法在 httpd.conf 文件的按不同虛擬主機或不同目錄的方式來屏蔽函數。 假如我們將如下內容加入到 php.ini 文件: disable_functions readfile,system

則我們會得到如下的輸出: warning: readfile() has been disabled for security reasons in

copyright © 萬盛學電腦網 all rights reserved