PHP Security: усиление безопасности через настройки php.ini

PHP · 19.04.2026
PHP Security: усиление безопасности через настройки php.ini

Зачем хардить PHP

PHP имеет множество функций, опасных при неправильной конфигурации. Правильная настройка php.ini закрывает целые классы уязвимостей: удалённое выполнение кода (RCE), раскрытие информации о сервере, перебор файлов через open_basedir обходы. Это первый шаг защиты любого PHP-сервера.

Скрыть информацию о PHP

expose_php = Off
; Убирает заголовок X-Powered-By: PHP/8.x из HTTP-ответов

Отключить опасные функции

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,\
    curl_exec,curl_multi_exec,parse_ini_file,show_source,\
    phpinfo,posix_kill,posix_mkfifo,posix_setpgid
Некоторые приложения (например, WP-CLI, Imagick) могут требовать часть этих функций. Проверьте после применения, что всё работает корректно.

Ограничение доступа к файловой системе

open_basedir = /var/www/mysite:/tmp:/usr/share/php
; Запрещает PHP читать файлы за пределами указанных директорий

Отключить удалённые URL

allow_url_fopen = Off
allow_url_include = Off
; Блокирует file_get_contents("http://...") и include с удалённых URL

Безопасные настройки сессий

session.cookie_httponly = On
session.cookie_secure = On
session.cookie_samesite = Strict
session.use_strict_mode = On
session.use_only_cookies = On
session.gc_maxlifetime = 1440

Настройки загрузки файлов

file_uploads = On
upload_tmp_dir = /tmp
upload_max_filesize = 64M
; Ограничьте upload_tmp_dir правами www-data

Отключить register_globals и magic_quotes (PHP < 5.4)

; Устаревшие, но проверьте в старых конфигах:
register_globals = Off
magic_quotes_gpc = Off

Чеклист безопасности PHP

  • expose_php = Off — скрыть версию PHP
  • display_errors = Off — не показывать ошибки пользователям
  • log_errors = On — логировать ошибки в файл
  • allow_url_include = Off — запретить удалённые include
  • disable_functions — отключить опасные функции
  • session.cookie_httponly = On — защита сессий
  • open_basedir — ограничить файловую систему
# Применить изменения
sudo systemctl reload php8.2-fpm

# Проверка
php -r "phpinfo();" 2>&1 | grep expose_php
Используйте PHP Security Checker: установите composer require enlightn/security-checker для автоматической проверки известных уязвимостей в зависимостях.
← Назад в базу знаний Задать вопрос поддержке