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...
Ограничени/Забранени функции в PHP
Това е вероятно все още непълен и неправилен списък на функциите, ограничавани от защитния режим.
| Функция | Ограничения |
|---|---|
| dbmopen() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| dbase_open() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| filepro() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| filepro_rowcount() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| filepro_retrieve() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| ifx_* | ограничения за sql_safe_mode, (!= защитен режим) |
| ingres_* | ограничения за sql_safe_mode, (!= защитен режим) |
| mysql_* | ограничения за sql_safe_mode, (!= защитен режим) |
| pg_lo_import() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| posix_mkfifo() | Проверява дали директорията, в която ще работите, е със същия UID (собственик) като скрипта, който се изпълнява. |
| putenv() | Осланя се на инициализационните директиви safe_mode_protected_env_vars и safe_mode_allowed_env_vars. За повече информация вижте документацията на putenv() |
| move_uploaded_file() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. |
| chdir() | Проверява дали директорията, в която ще работите, е със същия UID (собственик) като скрипта, който се изпълнява. |
| dl() | Тази функция е забранена в safe mode. |
| backtick operator | Тази функция е забранена в safe mode. |
| shell_exec() (еквивалент на символите (``) във вид на функция. | Тази функция е забранена в safe mode. |
| 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 (собственик) като скрипта, който се изпълнява. Освен това, не можете да указвате SUID, SGID и sticky битове |
| touch() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. Проверява дали директорията, в която ще работите, е със същия UID (собственик) като скрипта, който се изпълнява. |
| symlink() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. Проверява дали директорията, в която ще работите, е със същия UID (собственик) като скрипта, който се изпълнява. (забележка: само целта е проверявана) |
| link() | Проверява дали файловете или директориите, с които ще работите, са със същия UID (собственик) като скрипта, който се изпълнява. Проверява дали директорията, в която ще работите, е със същия UID (собственик) като скрипта, който се изпълнява. (забележка: само целта е проверявана) |
| apache_request_headers() | В защитния режим, не се връщат заглавки, започващи с 'authorization' (нечувствително към регистъра). |
| header() | В защитния режим, uid на скрипта е добавено към realm на хедъра WWW-Authenticate, ако укажете тази заглавка (използвана за HTTP автентификация). |
| PHP_AUTH variables | В защитния режим променливите PHP_AUTH_USER, PHP_AUTH_PW, и AUTH_TYPE са недостъпни в масива $_SERVER. Въпреки това, можете да използвате REMOTE_USER за 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() | Няма ефект когато PHP е стартирано в защитен режим. |
| max_execution_time | Няма ефект когато PHP е стартирано в защитен режим. |
| mail() | В защитен режим петият параметър е изключен. (забележка: важи само за версии на PHP след 4.2.3) |
| Всички функции, които използват php4/main/fopen_wrappers.c | ?? |
Ограничени/Забранени функции в PHP
tschmieder at bitworks dot de
22-Sep-2007 03:04
22-Sep-2007 03:04
bananarama
15-May-2006 10:11
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.
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 11:57
21-Mar-2006 11: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 11:46
23-Oct-2005 11:46
It seems that glob and file_exists functions are also restricted in safe-mode.
