Safe Mode

 

 

 

 

 
RSS
 
 
На главную | Контакты | Карта сайта | Cотовая связь | Учебник PHP | Windows 7 | HackZone  

Безопасный режим/Safe Mode

  

Консультация юриста

Ваш регион:
Ваше имя:

Ваш телефон

  (можно сотовый)

Ваш вопрос (можно кратко)



 
Учебник РНР
Назад Вперёд

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

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

Таблица 23-1. Директивы конфигурации, управляющие режимом safe mode
ДирективаЗначение по умолчанию
safe_modeOff
safe_mode_gid0
safe_mode_include_dir""
safe_mode_exec_dir1
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.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_gid. Установка его в On выполняет проверку GID, а установка Off (по умолчанию) выполняет проверку UID.

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

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

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

Warning!: open_basedir restriction in effect. File is in wrong directory in 
/docroot/script.php 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.php 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??


Назад Оглавление Вперёд
Постоянные соединения с БД ВверхИспользование РНР
из командной строки

На главную | Карта сайта | Windows 7 | Windows Registry | Stop-экраны | Update for Windows | Файл настроек .htaccess | Всё для мобильного телефона |
 

po gonn © 2004 "JULI'S BEEHIVE"