Зачем хардить 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— скрыть версию PHPdisplay_errors = Off— не показывать ошибки пользователямlog_errors = On— логировать ошибки в файлallow_url_include = Off— запретить удалённые includedisable_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 для автоматической проверки известных уязвимостей в зависимостях.