PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Использование PHP в командной строке> <Защищенный режим
Last updated: Fri, 22 Aug 2008

view this page in

Ограниченные или недоступные в защищенном режиме функции

Ниже приведен, вероятно, неполный и, возможно, не вполне корректный список функций, ограниченных в защищенном режиме.

Функции, ограниченные в безопасном режиме
Функция Ограничения
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_lo_import() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
posix_mkfifo() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
putenv() Подчиняется настройкам the 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. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
system() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd()
passthru() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
popen() Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
fopen() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
mkdir() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
rmdir() Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
rename() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
unlink() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
copy() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Для параметров source и target ).
chgrp() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
chown() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
chmod() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Кроме того, вы не можете устанавливать UID, SGID и sticky-биты.
touch() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
symlink() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target )
link() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target )
apache_request_headers() В защищенном режиме, заголовки, начинающиеся с 'authorization' (независимо от регистра), не возвращаются.
header() В защищенном режиме, текущий UID скрипта будет добавлен к realm-части заголовка WWW-Authenticate, если вы его устанавливаете (используется для HTTP-аутентификации)
переменные PHP_AUTH В защищенном режиме, переменные PHP_AUTH_USER, PHP_AUTH_PW, и AUTH_TYPE недоступны как элементы массива $_SERVER. Несмотря на это, вы все еще можете использовать переменную REMOTE_USER для идентификации пользователя. (Замечание: актуально только для PHP 4.3.0 и выше)
highlight_file(), show_source() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
parse_ini_file() Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
set_time_limit() Не имеет никакого эффекта, если безопасный режим используется
max_execution_time Не имеет никакого эффекта, если безопасный режим используется
mail() В защищенном режиме пятый параметр недоступен. (Замечание: актуально только для PHP 4.2.3 и выше)
Любая функция, которая использует php4/main/fopen_wrappers.c Временно не документировано



add a note add a note User Contributed Notes
Ограниченные или недоступные в защищенном режиме функции
tschmieder at bitworks dot de
22-Sep-2007 02:04
refers to the previuos posting of

bananarama
15-May-2006 10:11

"all file-handling and -management functions are restricted, just in case someones wondering why they're not listed here.
a script can run these functions on files without errors, if the files were created (are owned) by the same UID, the script was created (is owned) by."

.... or if the directory, in which the file is located, has the same UID as the script, which tries to use a file in that directory...
bananarama
15-May-2006 09:11
all file-handling and -management functions are restricted, just in case someones wondering why they're not listed here.
a script can run these functions on files without errors, if the files were created (are owned) by the same UID, the script was created (is owned) by.

example:
you upload a script, it is owned by UID 720. you upload a picture, it is owned by UID 720. the script creates a thumbnail of the picture. the thumb is owned by UID 30 (the server/apache). this makes it impossible (?) to run a gallery script, which checks for newly uploaded pictures in order to create and display thumbs of them if you want to check, if a thumbnail already exists. the script would be owned by UID 720, the thumb by UID 30.
you could upload a script which creates a file (e.g. from a text file) with .php ending. this script would be owned by UID 30 and could access the thumbs, but it couldnt read the upload pictures.

<?
  $data
= fread(fopen("test.txt", "r"), filesize("test.txt"));
  
 
$file = "test.php";  
  if (!
$file_handle = fopen($file,"a")) { echo "Cannot open file"; } 
  if (!
fwrite($file_handle, $data)) { echo "Cannot write to file"; }   
 
fclose($file_handle);
 
 
chmod("test.php", 0777);
?>
zauker
21-Mar-2006 10:57
The SAFE_MODE handling of glob() needs a checkup for security reasons.

In short - always with SAFE_MODE on:

1) glob() can still fetch all filenames in a directory not owned by the
same UID as the user, if just the first file in the directory (or more
specific, the glob-pattern) happens to be owned by the same user as the
PHP-script.

2a) No warning is raised if glob is used on another owner's directory
and there is no match.

2b) In those cases where SAFE_MODE correctly prohibits glob() from
fetching a list of files, the warning still discloses the first
filename.

Solution: glob() in SAFE_MODE should be restricted in the same way as
opendir() is

see the link http://bugs.php.net/bug.php?id=28932
Jan
23-Oct-2005 10:46
It seems that glob and file_exists functions are also restricted in safe-mode.
lionel at mamane dot lu
31-Mar-2005 02:05
readfile() is probably also limited by safe mode

 
show source | credits | sitemap | contact | advertising | mirror sites