PHP-приложения имеют репутацию проблем с безопасностью выше среднего. Какие методы настройки вы используете, чтобы убедиться, что приложение максимально безопасно?
Я ищу такие идеи, как:
- Использование усиленного PHP / Suhosin
- Использование mod_security
- Отключение register_globals и allow_url_fopen в php.ini
Я обычно использую Linux, но не стесняйтесь предлагать решения и для Windows.
источник
По моему опыту, большинство уязвимостей на веб-сайте, основанном на PHP, являются результатом плохого (сайтного) дизайна, а не недостатков в самом PHP.
Несколько быстрых советов:
* Вы также можете заглянуть в короткий пост, который я написал под названием «Защита phpinfo (), что-то вроде», и обязательно прочитайте комментарии http://egovsergo.com/2009/04/03/protecting-your-phpinfo/ Это была быстрая идея, я должен был (в некоторой степени) защитить phpinfo (), если я как-то забыл удалить его на производственном сайте.
В более общем смысле, некоторые разработчики пишут оболочки для чувствительных функций, которые проверяют, установлен ли флаг «производственный сайт» или нет, и отключают чувствительную функцию в производственном процессе.
источник
Другие параметры, которые должны быть изменены, чтобы укрепить PHP:
Сохраните все ошибки PHP в файле /var/log/phperror.log :
источник
Я добавил репозитории dotdeb в мой /etc/apt/sources.lst
Поскольку они исправляют php / apache / mysql гораздо чаще, чем Debian.
источник
Рассмотрите возможность настройки
open_basedir
на основе сайта.open_basedir
это настройка php.ini, которая запрещает вашим скриптам доступ к файлам вне определенного белого списка. Если на вашем сервере размещено несколько сайтов, один сайт не сможет прочитать настройки базы данных с другого сайта. Это также предотвратит доступ php-скрипта к основным системным файлам. Open basedir легко настроить, просто добавьте строку "php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" к каждому Apache vhost.Также рассмотрите возможность отключения механизма PHP-скриптов для всех сайтов / папок, которые не должны содержать PHP-скрипты (например, папка с загруженными изображениями). Опять же, это просто, добавьте «php_admin_value engine off» на любой виртуальный хост Apache, для которого не требуется php. Чтобы отключить PHP в каталоге, поместите то же самое в тег Directory.
Запускайте права доступа к файлам настолько жестко, насколько это возможно, избегайте доступа для записи к PHP-сценариям для пользователя Apache, это предотвращает изменение запущенного сценария или других сценариев на том же сайте / сервере. Избегайте разрешений 777, если это вообще возможно, выясните минимальные разрешения, необходимые для запуска приложения, и используйте их.
Если вы размещаете несколько сайтов, каждый со своей собственной базой данных, используйте для каждого отдельного пользователя MySQL / Postgres и установите разрешения для каждого пользователя таким образом, чтобы они имели доступ только к соответствующим базам данных. Опять же, это предотвратит несанкционированный доступ к базе данных другого приложения.
Suosin, HardenedPHP, mod_security и тому подобное также ценны, но используют их в дополнение к сильно заблокированной конфигурации, а не вместо.
источник
Suhosin имеет довольно существенные эксплуатационные затраты, поэтому комментарий «ничего не стоит» немного не подходит.
источник
Вы ищете базовые предложения по брандмауэру / топологии? Мне нравится идея использовать такие вещи, как фунт, чтобы запретить доступ напрямую к веб-серверу PHP из немытых сетей. Таким образом, вы также можете отделить веб-сервер от других частей вашей сети.
источник
Использование Suhosin / mod_security / SuPHP определенно сделает ваш PHP-сервер безопасным. Отключение определенных функций, таких как exec, passthru, system и escapeshellcmd, также очень поможет.
источник