php 安全模式開啓(safe_mode=on|off)

php安全模式:safe_mode=on|off
啓用safe_mode指令將對在共享環境中使用PHP時可能有危險的語言特性有所限制。能夠將safe_mode是指爲布爾值on來啓用,或者設置爲off禁用。它會比較執行腳本UID(用戶ID)和腳本嘗試訪問的文件的UID,以此做爲限制機制的基礎。若是UID相同,則執行腳本;不然,腳本失敗。
具體地,當啓用安全模式時,一些限制將生效。
php

一、全部輸入輸出函數(例如fopen()、file()和require())的適用會受到限制,只能用於與調用這些函數的腳本有相同擁有者的文件。例如,假定啓用了安全模式,若是Mary擁有的腳本調用fopen(),嘗試打開由Jonhn擁有的一個文件,則將失敗。可是,若是Mary不只擁有調用fopen()的腳本,還擁有fopen()所調用的文件,就會成功。
二、若是試圖經過函數popen()、system()或exec()等執行腳本,只有當腳本位於safe_mode_exec_dir配置指令指定的目錄纔可能。
三、HTTP驗證獲得進一步增強,由於驗證腳本用於者的UID劃入驗證領域範圍內。此外,當啓用安全模式時,不會設置PHP_AUTH。
四、若是適用MySQL數據庫服務器,連接MySQL服務器所用的用戶名必須與調用mysql_connect()的文件擁有者用戶名相同。
安全模式和禁用的函數

下面是啓用safe_mode指令時受影響的函數、變量及配置指令的完整列表:
mysql

apache_request_headers()
backticks()和反引號操做符 
chdir()chgrp()     
chmode()    
chown()copy()     
dbase_open()    
dbmopen()dl()     
exec()     
filepro()filepro_retrieve()   
filepro_rowcount()   
fopen()header()    
highlight_file()   
ifx_*ingres_*    
link()     
mail()max_execution_time()   
mkdir()     
move_uploaded_file()mysql_*     
parse_ini_file()   
passthru()pg_lo_import()    
popen()     
posix_mkfifo()putenv()    
rename()    
zmdir()set_time_limit()   
shell_exec()    
show_source()symlink()    
system()    
touch()

如下是一些和安全模式相關的配置選項
    safe_mode_gid=on|off
    次指令會修改安全模式的行爲,即從執行前驗證UID改成驗證組ID。例如,若是Mary和John處於相同的用戶組,則Mary的腳本能夠對John的文件調用fopen()。sql


    safe_mode_include_dir=string
    可使用指令safe_mode_include_dir指示多個路徑,啓用安全模式時在這些路徑中將忽略安全模式。例如,你可使用此函數指定一個包含不一樣模板的目錄,致謝模板可能會繼成到一些用戶網站。能夠指定多個目錄,在基於UNIX的系統各目錄用冒號分隔,在Windows中用分號分隔。shell

注意,若是指定某個路徑但未包含最後的斜線,則該路徑下的全部目錄都會忽略安全模式設置。例如,若是設置次指令爲/home/configuration,表示/home/configuration/templates/和/home/configureation/passwords都排除在安全模式限制以外。所以,若是隻是要排除一個目錄或一組目錄不受安全模式設置的限制,要確保每一個目錄都包括最後的斜線。數據庫


    safe_mode_env_vars=string
    當啓用安全模式時,能夠只用次指令容許執行用戶的腳本修改某些環境變量。能夠容許修改多個變量,每一個變量之間用逗號分隔。apache


    safe_mode_exec_dir=string
    次指令指定一些目錄,其中的系統程序能夠經過諸如system()、exec()或passthru()等函數執行。爲此必須啓用安全模式。此指令有一個奇怪的地方,在全部操做系統中(包括Windows),都必須使用斜線(/)做爲目錄的分隔符。安全


    safe_mode_protected_env_vars=string
    此指令保護某些環境變量不能被putenv()函數修改。默認狀況下,變量LD_LIBRARY_PATH是受保護的,由於若是在運行時修改這個變量可能致使不可預知的結果。關於此環境變量的更多信息,請參考搜索引擎或Linux手冊。注意,本屆中聲明的全部便來弄個都覆蓋safe_mode_allowed_env_vars指令中聲明的變量。服務器

相關文章
相關標籤/搜索