php安全模式

來源:互聯網
上載者:User

章 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 
/docroot/script.php on line 2 



被安全模式限制或屏蔽的函數 
以下安全模式列表可能不完整或不正確。 

表格 24-2. 安全模式限制函數 

函數名 限制 
dbmopen() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
dbase_open() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
filepro() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
filepro_rowcount() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
filepro_retrieve() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
ifx_*() sql_safe_mode 限制, (!= safe mode) 
ingres_*() sql_safe_mode 限制, (!= safe mode) 
mysql_*() sql_safe_mode 限制, (!= safe mode) 
pg_loimport() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
posix_mkfifo() 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
putenv() 遵循 ini 設定的 safe_mode_protected_env_vars 和 safe_mode_allowed_env_vars 選項。請參考 putenv() 函數的有關文檔。 
move_uploaded_file() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
chdir() 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
dl() 該函數在安全模式中已被屏蔽。 
backtick operator 該函數在安全模式中已被屏蔽。 
shell_exec()(在功能上和 backticks 函數相同) 該函數在安全模式中已被屏蔽。 
exec() 您只能在 safe_mode_exec_dir 設定的目錄下進行執行操作。基於某些原因,目前不能在可執行對象的路徑中使用 ..。 
system() 您只能在 safe_mode_exec_dir 設定的目錄下進行執行操作。基於某些原因,目前不能在可執行對象的路徑中使用 ..。 
passthru() 您只能在 safe_mode_exec_dir 設定的目錄下進行執行操作。基於某些原因,目前不能在可執行對象的路徑中使用 ..。 
popen() 您只能在 safe_mode_exec_dir 設定的目錄下進行執行操作。基於某些原因,目前不能在可執行對象的路徑中使用 ..。 
mkdir() 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
rmdir() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
rename() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
unlink() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
copy() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 (on source and target) 
chgrp() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
chown() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 
chmod() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 另外,您不能設定 SUID、SGID 和 sticky bits 
touch() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 
symlink() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 (注意:僅測試 target) 
link() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 (注意:僅測試 target) 
getallheaders() 在安全模式下,以“authorization”(區分大小寫)開頭的頭資訊將不會被返回。警告:getallheaders() 無法在 aol-server 下實現! 
header() 在安全模式下,如果您設定了 WWW-Authenticate,當前指令碼的 uid 將被添加到該頭資訊的 realm 部分。 
highlight_file(), show_source() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 (注意,僅在 4.2.1 版本後有效) 
parse_ini_file() 將檢查您將要操作的檔案/目錄與正在執行的指令碼是否有相同的 UID。 將檢查您將要操作的目錄和正在執行的指令碼是否有相同的 UID。 (注意,僅在 4.2.1 版本後有效) 
任何使用 php4/main/fopen_wrappers.c 的函數 ??


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.