Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программирование > PHP
Учебник РНР
Назад Вперёд

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

Содержание
Функции, ограниченные/отключённые режимом 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