Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
Попалась на глаза англоязычная статья с советами по безопасности при настройке PHP. Там нет чего-то уникального и необычного, но материал хорош как готовый список действий или рекомендаций, по которым стоит пробежаться при настройке веб сервера. Решил на основе её сделать чек-лист на русском языке. Кому нужны подробности, переходите в источник. ✅ Смотрим список активных модулей: # php -m Отключаем ненужные: # mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable ✅ Отключаем отображение информации о версии PHP: expose_php=Off Это параметр для php.ini. ✅ Отключаем отображение ошибок PHP для посетителей: display_errors=Off Вместо этого логируем их отдельно: log_errors=On error_log=/var/log/httpd/php_scripts_error.log ✅ Если не нужна загрузка файлов на веб сервер, отключите эту возможность: file_uploads=Off Если загрузка нужна, то хотя бы ограничьте максимальный размер файла до необходимого предела: file_uploads=On upload_max_filesize=10M ✅ Отключаем функцию allow_url_fopen, если не используются сайтом. Она открывает широкие возможности для взлома, если разработчики забудут о фильтрации входящих данных. allow_url_fopen=Off ✅ Настройка размера POST запросов. Этот параметр должен быть не меньше upload_max_filesize, если разрешена загрузка файлов. Если же она запрещена, то большой разрешённый размер post запросов не нужен. Вряд ли вам через формы потребуется заливать большой объём данных. post_max_size=10M или post_max_size=10K ✅ Подобрать необходимые лимиты выполнения скриптов. Тут всё сильно зависит от самого сайта. В идеале, много ресурсов не выделять, но, к примеру, тот же Bitrix, требует очень много оперативной памяти и времени выполнения для своих скриптов. max_execution_time = 30 max_input_time = 30 memory_limit = 64M ✅ Отключаем потенциально опасные функции PHP. Оставляем только то, что реально нужно. disable_functions = exec,passthru,shell_exec,system, proc_open,popen,curl_exec,curl_multi_exec, parse_ini_file,show_source ✅ Убедиться, что параметр cgi.force_redirect не отключен принудительно. По дефолту, если его явно не указать, то он будет включен. cgi.force_redirect=On ✅ Убедиться, что php работает от отдельного непривилегированного пользователя. Настройка будет зависеть от используемого менеджера процессов php. Проверяем примерно так: # ps aux | grep php ✅ Ограничиваем доступ php к файловой системе: open_basedir = "/var/www/html/" ✅ Настраиваем место хранения для сессий: session.save_path = "/var/lib/php/session" Важно убедиться, что туда нет доступа посторонним. Кроме веб сервера эта директория никому не нужна. Также туда не должно быть доступа с сайта. В статье было гораздо больше информации, но некоторые параметры уже объявлены устаревшими. А часть не относится непосредственно к PHP (настройка selinux, firewall и т.д.), поэтому я не стал включать её в этот список. ❗️Материал имеет смысл сохранить в закладки. Источник. #security #webserver #php