|
- Содержание
- Функции, ограниченные/отключённые режимом safe mode.
Безопасный режим PHP это попытка разрешения проблемы безопасности совместно
используемого сервера. Архитектурно некорректно пытаться решить эту проблему
на уровне PHP, но, поскольку альтернативы уровня web-сервера и ОС не слишком реалистичны, многие,
особенно ISP, используют safe mode.
Таблица 23-1. Директивы конфигурации, управляющие режимом safe mode
Директива | Значение по умолчанию | safe_mode
| Off | safe_mode включён/on, PHP проверяет, совпадает ли owner/владелец текущего скрипта с owner
файла, которым оперирует функция работы с файлами. Например:
-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');
?> |
приводит к такой ошибке, если safe mode активен:
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 |
Однако может быть такое окружение, когда строгая проверка UID не подходит, а достаточно менее строгой проверки
GID. Это поддерживается посредством переключателя
safe_mode вы установите директорию
safe mode. Таблица 23-2. Функции, ограниченные безопасным режимом/Safe mode
Функция | Ограничения |
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() | Эта функция отключена в режиме
safe mode. |
Операция backtick | Эта функция отключена в режиме safe mode. |
shell_exec() (функциональный эквивалент backtick'ов) |
Эта функция отключена в режиме safe mode. |
exec() | Вы можете выполнять исполняемые файлы только внутри
system() | Вы можете выполнять исполняемые файлы только внутри
passthru() |
Вы можете выполнять исполняемые файлы только внутри popen() |
Вы можете выполнять исполняемые файлы только внутри 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-биты. |
touch() | Проверяет, имеют ли файл(ы)/директории, с которыми вы работаете, тот же самый
UID, что и исполняемый скрипт. Проверяет, имеет ли директория, в
которой вы работаете, тот же самый UID, что и исполняемый скрипт. |
symlink() | Проверяет, имеют ли файл(ы)/директории, с которыми вы работаете, тот же самый
UID, что и исполняемый скрипт. Проверяет, имеет ли директория, в
которой вы работаете, тот же самый UID, что и исполняемый скрипт. (Примечание: проверяется только target/цель) |
link() | Проверяет, имеют ли файл(ы)/директории, с которыми вы работаете, тот же самый
UID, что и исполняемый скрипт. Проверяет, имеет ли директория, в
которой вы работаете, тот же самый UID, что и исполняемый скрипт. (Примечание:
проверяется только target/цель) | getallheaders()
| В безопасном режиме header'ы, начинающиеся с 'authorization'
(нечувствительно к регистру), не будут возвращаться. Предупреждение: это
нарушено реализацией aol-сервером функции getallheaders()
! | header() |
В безопасном режиме uid скрипта добавляется в часть realm шапки WWW-Authenticate,
если вы устанавливаете эту шапку/header (используемую для HTTP Authentication). |
highlight_file(),
show_source() |
Проверяет, имеют ли файл(ы)/директории, с которыми вы работаете, тот
же самый UID, что и исполняемый скрипт. Проверяет, имеет ли
директория, в которой вы работаете, тот же самый UID, что и исполняемый
скрипт. (Примечание: работает, только начиная с PHP 4.2.1) |
parse_ini_file() |
Проверяет, имеют ли файл(ы)/директории, с которыми вы работаете, тот
же самый UID, что и исполняемый скрипт. Проверяет, имеет ли директория, в которой вы работаете, тот же самый UID, что и исполняемый
скрипт. (Примечание: работает, только начиная с PHP 4.2.1) | Любая функция, использующая
php4/main/fopen_wrappers.c | ?? |
| | |
Главная > Программирование > PHP
|