uznay-chto-hochesh.narod.ru

-сайт для интересующихся людей

Учебник - справочник по PHP.

Здесь Вы найдете что хотели

Меню сайта
Главная
Введение
Справочник языка
Возможности РНР
Функции (справочник)
Расширение РНР 4.0
F.A.Q. частые вопросы
Приложения
Алфавитный указатель
Друзья сайта
сделай сайт сам! пособие по html
изучение html и web-дизайна для новичков
Бесплатная отправка смс на все операторы
Реклама
  порево смотреть бесплатно и без смс. | вибромассажер отзывы
Назад Вперёд

Глава 23. Безопасный режим/Safe Mode

Содержание
Функции, ограниченные/отключённые режимом safe mode.

Безопасный режим PHP это попытка разрешения проблемы безопасности совместно используемого сервера. Архитектурно некорректно пытаться решить эту проблему на уровне PHP, но, поскольку альтернативы уровня web-сервера и ОС не слишком реалистичны, многие, особенно ISP, используют safe mode.

Таблица 23-1. Директивы конфигурации, управляющие режимом safe mode
ДирективаЗначение по умолчанию
safe_mode Off
safe_mode_gid 0
safe_mode_include_dir ""
safe_mode_exec_dir 1
open_basedir ""
safe_mode_allowed_env_varsPHP_
safe_mode_protected_env_varsLD_LIBRARY_PATH
disable_functions""

Когда safe_mode включён/on, PHP проверяет, совпадает ли owner/владелец текущего скрипта с owner файла, которым оперирует функция работы с файлами. Например:

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.htm 
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd

Запуск на выполнение этого script.htm

<?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.htm on line 2

Однако может быть такое окружение, когда строгая проверка UID не подходит, а достаточно менее строгой проверки GID. Это поддерживается посредством переключателя safe_mode_gid. Установка его в On выполняет проверку GID, а установка Off (по умолчанию) выполняет проверку UID.

Если вместо safe_mode вы установите директорию open_basedir, то все операции с файлами будут проводиться только с файлами в пределах этой директории. Например (пример Apache httpd.conf):

<Directory /docroot>
  php_admin_value open_basedir /docroot 
</Directory>

Если вы запустите тот же самый скрипт script.htm с установкой open_basedir, то результат будет таким:

Warning!: open_basedir restriction in effect. File is in wrong directory in 
/docroot/script.htm 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.htm on line 2

Функции, ограниченные/отключённые режимом 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()Вы можете выполнять исполняемые файлы только внутри 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-биты.
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??
Назад Оглавление Вперёд
Постоянные соединения с БД ВверхИспользование РНР
из командной строки

Хостинг от uCoz