Новые книги

Эта книга для тех, кто давно связан с разработкой программного обеспечения. Или для тех, кто еще думает выбрать программирование своей профессией. Или для тех, кто просто привык думать и размышлять о происходящем в мире информационных технологий.

Не секрет, что основная масса софтостроения сосредоточена в секторе так называемой корпоративной разработки: от комплексных информационных систем предприятия до отдельных приложений. Поэтому немалая часть сюжетов касается именно Enterprise Programming.

Из текста вы вряд ли узнаете, как правильно склеивать многоэтажные постройки из готовых компонентов в гетерогенной среде, проектировать интерфейсы, синхронизировать процессы или писать эффективные запросы к базам данных. Подобные темы будут лишь фоном для рассказа о софтостроительной «кухне». При определенной доле любопытства вы сможете убедиться, что новое – это хорошо забытое старое, узнать, как устроены некоторые сложные системы, когда следует применять разные технологии, почему специалистам в информатике надо особенно тщательно фильтровать поступающую из множества источников информацию, и многое другое, что вы, возможно, еще не знали или уже знаете, но с другой стороны.

В книге мне хотелось показать наш софтостроительный мир разработки корпоративных информационных систем не с парадного фасада описаний программных сред, подходов и технологий, а изнутри. Насколько это получилось – судить читателю.
С помощью этой книги вы сможете заработать в Интернете солидный капитал. Быстро! Всемирно известный автор книг о Секрете притяжения любых благ – успеха, счастья, богатства – Джо Витале расскажет о своих секретах ведения бизнеса в Интернете. В этой книге нет сложной технической информации – в ней описывается, как с помощью простых и эффективных методов можно значительно повысить уровень продаж в любом интернет-магазине, какие бы товары или услуги в нем ни предлагались. Вы узнаете, как можно заработать на интернет-аукционах, партнерских программах, на сайтах социальных сетей, а также на любой информации, которой вы располагаете. Вы научитесь создавать гипнотические тексты для своего веб-сайта и завоевывать доверие пользователей. Книга написана доступным языком и предназначена для читателей любого уровня подготовки.

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

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

Глава 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.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??

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