Настройка безопасности php.ini
На виртуальном хостинге обычным пользователям не разрешается редактирование php.ini, однако вы можете добавлять локальные php.ini в нужные директории сайта. При этом php.ini в корневой директории вашего сайта будет влиять на все вложенные. Прежде чем приступать к настройке, проверьте позволяет ли ваш хостинг использовать локальные php.ini, создав его и разместив в нужную папку.
PHP disable_functions
Директива disable_functions используется для отключения не нужных функций. С ее помощью можно отключить такие функции как shell_exec и phpinfo, на которые в первую очередь и нацелены злоумышленники при первичном анализе сайта.
PHP open_basedir
Данная директива php.ini позволяет или запрещает открывать определенные файлы вашего каталога. Например, можно ограничить доступ к каталогу администратора:
PHP magic_quotes_gpc
Данная настройка позволяет отключить или включить использование «магических кавычек», которые используются для экранирования специальных символов. Обычно рекомендуется включать данную директиву.
PHP safe_mode
Safe_mode в PHP нужно отключить, так как его использования не рекомендуется. Даже на официальном сайте PHP написано о несовершенности данной опции, вследствие чего она не только не помогала, но даже способствовала взлому.
PHP register_globals
Одна из самых неудобных директив созданных разработчиками, которая регистрирует все глобальные переменные GET, POST, COOKIE. Ее отключение является обязательным. Более подробно об это написано тут.
PHP allow_url_fopen
Отключите allow_url_fopen, так как эта директива позволяет получить доступ через URL к некоторым объектам, например, файлам. По умолчанию оболочки предназначены для доступа к удаленным файлам с помощью FTP или HTTP-протоколов. Некоторые расширения, такая, как Zlib, может испоьзовать дополнительные оболочки.
Ошибка «Warning: Unknown: open_basedir restriction in effect.» (РЕШЕНО)
В работе PHP можно столкнуться с ситуацией, когда один и тот же скрипт нормально работает в одной папке и не запускается при перемещении в другую папку. Либо при установке веб приложения на сервере Linux оно может не работать, хотя веб сервер настроен правильно и другие сайты работают.
Либо проблема может следующая: PHP не может создать файл, открыть файл или записать в файл в папке, для которой у него достаточно привилегий или даже в папку, открытую для всех.
В логах веб-сервера могут быть примерно следующие сообщения:
В сообщениях упоминается open_basedir. Директива open_basedir указывается в конфигурационном файле PHP (php.ini) и устанавливает директории, к которым может иметь доступ PHP. Более подробную информацию о данной директиве вы найдёте в статье «Для чего нужна и как использовать open_basedir».
Для исправления этой ошибки откройте конфигурационный файл PHP, в Linux он расположен по пути /etc/php/php.ini.
Найдите в этом файле директорию open_basedir и добавьте папку, в которой вам нужно запустить PHP скрипт, либо в которой PHP должен иметь доступ к файлам. В Windows разделяйте директории символом ; (точкой с запятой). На всех остальных системах, разделяйте директории символом : (двоеточием). При работе в качестве модуля Apache, пути open_basedir автоматически наследуются от родительских директорий.
Если скрипт запускаете через веб-сервер, то перезапустите веб-сервер, чтобы он использовал новые настройки.
По этой же причине могут быть проблемы в работе phpMyAdmin, подробности смотрите в статье «$Cfg[‘TempDir’] (./tmp/) недоступен в phpMyAdmin (РЕШЕНО)».
Open basedir что это
Файл конфигурации ( php3.ini в PHP 3.0 и просто php.ini в PHP 4.0) читается при старте PHP. Для версий серверных модулей PHP это происходит один раз при старте web-сервера. Для CGI и CLI-версий это происходит при каждом вызове.
По умолчанию php.ini размещается как опция времени компиляции (см. FAQ), но местоположение может быть изменено для CGI и CLI-версий ключом командной строки -c (см. главу об использовании PHP из командной строки. Вы можете использовать также переменную окружения PHPRC для добавления пути поиска php.ini .
Пример 3-1. php.ini
При использовании PHP как Apache-модуля вы можете также изменить установки конфигурации, используя директивы файлов конфигурации Apache и файлы .htaccess. Вам для этого необходимы привилегии "AllowOverride Options" или "AllowOverride All").
Для PHP 3.0 имеются директивы Apache, которые соответствуют каждому имени установки конфигурации в php3.ini , исключая имена с префиксом "php3_".
Для PHP 4.0 имеются несколько директив Apache, которые позволяют изменять конфигурацию PHP и в самом файле конфигурации Apache. php_value name value
Устанавливает значение специфицированной переменной.
php_flag name on|off
Используется для установки булевой опции конфигурации.
php_admin_value name value
Устанавливает значение специфицированной переменной. Установки конфигурации "Admin" могут устанавливаться только в главных файлах конфигурации Apache, но не в .htaccess-файлах.
php_admin_flag name on|off
Используется для установки булевой опции конфигурации.
Пример 3-2. Пример конфигурации Apache
Вы можете увидеть значения конфигурации на выводе phpinfo() . Можно также получить доступ к значениям отдельных установок конфигурации с помощью get_cfg_var() .
Эта опция включает знающие об URL fopen-оболочки, которые делают возможным доступ к URL-объектам наподобие файлов. Оболочки по умолчанию предоставляются для доступа к удалённым файлам через использование протокола ftp или http, некоторые расширения наподобие zlib могут регистрировать дополнительные оболочки.
Примечание: эта опция была введена сразу после появления версии 4.0.3. Для версий до 4.0.3 включительно вы можете только отключать эту возможность на этапе компиляции, используя ключ конфигурации —disable-url-fopen-wrapper .
| Предупреждение! | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| битовое поле | включает сообщение о |
|---|---|
| 1 | нормальных ошибках |
| 2 | нормальных предупреждениях |
| 4 | ошибка разборщика |
| 8 | некритичные стилевые предупреждения |
Эта директива имеет по умолчанию значение 7 (выводятся нормальные ошибки, нормальные предупреждения и ошибки разборщика).
Отключает тэги HTML в сообщениях об ошибках.
Ограничивает файлы, которые могут быть открыты в PHP специфицированным деревом директорий.
Когда скрипт пытается открыть файл с помощью, например, fopen или gzopen, проверяется расположение файла. Если файл находится вне специфицированного дерева директорий, PHP его не откроет. Все символические ссылки разрешаются, поэтому это ограничение невозможно обойти с помощью symlink.
Специальное значение . указывает, что директория, в которой хранится скрипт, будет использоваться как базовая директория/base-directory.
В Windows разделяйте директории точкой с запятой. На всех других системах — двоеточием. При использовании в качестве Apache-модуля, автоматически наследуются пути open_basedir из родительских директорий.
Ограничение, специфицируемое с помощью open_basedir, это в действительности префикс, а не имя директории. Это означает, что "open_basedir = /dir/incl" даёт также доступ к "/dir/include" и "/dir/incls", если таковые существуют. Если вы хотите ограничить доступ только для одной конкретной директории, завершайте его слэшем. Например: "open_basedir = /dir/incl/"
Примечание: поддержка нескольких директорий была введена в 3.0.7.
По умолчанию разрешено открывать все файлы.
Устанавливает порядок разбора переменных GET/POST/COOKIE. Значение по умолчанию этой директивы: "GPC". Установка "GP", например, заставит PHP полностью игнорировать куки и перезаписывать любые переменные метода GET на переменные метода POST с теми же именами.
Обратите внимание, что эта опция отсутствует в PHP 4. Вместо неё используйте variables_order.
Устанавливает порядок EGPCS (Environment, GET, POST, Cookie, Server) для разбора переменных. Значение по умолчанию: "EGPCS". Установка "GP", например, заставит РНР полностью игнорировать переменные окружения, куки и серверные переменные и перезаписывать любые переменные метода GET на переменные метода POST с теми же именами.
TRUE по умолчанию. Если изменить на FALSE , скрипты будут прерываться, как только они попытаются вывести что-нибудь после того как клиент разорвал соединение.
FALSE по умолчанию. Изменение на TRUE заставляет PHP сообщить слою вывода, что он должен очищаться автоматически после каждого блока вывода. Это равносильно вызову PHP -функции flush() после каждого вызова print() или echo() и после каждого HTML -блока.
При использовании PHP внутри web-среды, включение этой опции значительно снижает производительность и обычно рекомендуется только при отладке. Это значение по умолчанию устанавливается в TRUE , если работа идёт под CLI SAPI .
Специфицирует список директорий, где функции require() , include() и fopen_with_path() ищут файлы. Формат напоминает системную переменную окружения PATH : список директорий, разделённых двоеточием в UNIX или точкой запятой — в Windows.