Возможно самое важное для безопасности сайта это выбор хостинга и серверов. Однако, из-за широкого разнообразия различных вариантов хостинга, не просто составить полный список для всех ситуаций.
Общие риски сервера
Если у вас ограниченный бюджет и ваш сайт не содержит секретной информации, вы можете обойтись общим сервером, но нужно понимать неизбежность риска. Ниже приведены советы по содержанию сайта на общем сервере.
Для реального восприятия прочитайте эту о тысячах сайтов, которые позволили Google индексировать результаты phpinfo (). Не делайте эту ошибку на вашем сайте! Статья включает в себя тревожную статистику о большом проценте сайтов, которые используют старые настройки, как register_globals или не имеют open_basedir вообще. Кстати, если термины phpini и register_globals, незнакомы вам, вероятно, вы не готовы управлять безопасностью собственного сайта.
Настройка Apache
Использование Apache. Htaccess
Заблокируйте типичные попытки эксплоитов, локальным .htaccess файлом Apache. Это опция доступна не на каждом сервере. Поговорите с вашим хостером при возникновении проблем. Используя .htaccess вы можете с помощью пароля защитить важные каталоги, такие как администратор, ограничить доступ к директориям, IP-адресам в зависимости от конфигурации сервера, можно поднять уровень защиты при переходе с РНР4 на РНР5.
Joomla предоставляется с уже установленным .htaccess, но его нужно выбрать для использования. Файл называется htaccess.txt. Для использования, переименуйте его в .htaccess и поместите в корень вашего сайта с помощью FTP. Важно отметить, что утановочный файл называется htaccess.txt, а установленный на сайте .htaccess, практически не использует обновления, когда вы обновляете сайт для установки новой версии Joomla. Вам придется вручную обновлять файл для новой версии Joomla. Есть существенные изменения для файлов с 1.5.23 и выше, и 1.6.2 и выше.
Рассмотрим следующий принцип «наименьших привилегий» для запуска PHP с использованием таких инструментов, как PHPsuExec, php_suexec или suPHP. ( Примечание: эти новые методы, требующие согласования действий с хостинг - провайдером. Такой выбор разрешен либо блокирован на основном сервере и индивидуально не регулируется на общих серверах.
Использование Apache mod_security
Настройка Apache mod_security и mod_rewrite фильтров для блокирования PHP атак. (Примечание: эти методы обычно требуют согласования с вашим хостинг-провайдером. Такие возможности будут включены или отключены на выделенном сервере и не регулируются на общих серверах.)
Убедитесь, что аккаунты MySQL установлены с ограниченным доступом. Начальная установка MySQL является небезопасной и требует тщательной настройки. (Примечание: этот пункт относится только к администраторам собственных серверов таких, как выделенные серверы. Пользователи общих серверов зависят от их хостинг-провайдера, устанавливающего надлежащий уровень безопасности баз данных.)
Разберитесь, как работает файл php.ini и как управляют конфигурациями PHP. Изучите php.ini на , и хорошо-документируемый типовой файл php.ini включенный по умолчанию в установку PHP.
Пользуйтесь РНР5
В настоящие время, как PHP4, так и PHP5, поддерживаются, и оба часто доступны на серверах. Перед тем как РНР4 оживет свое, обновите свои скрипты для РНР5. Не волнуйтесь об основном коде Joomla; все существующие версии РНР5 совместимы.
На общих серверах вы не можете редактировать основной файл php.ini, но можете добавлять собственные, локальные файлы php.ini.
Если это так, вам необходимо скопировать файлы php.ini для каждой поддиректории, который требует специальных настроек. К счастью, помогут сделать эту работу за вас.
Используйте disable_functions, чтобы отключить опасные PHP-функции, которые не требуются для вашего сайта. Вот типичный вариант для сайтов Joomla!:
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
open_basedir должена быть включена и правильно настроена. Эта директива ограничивает файлы, которые могут быть открыты в PHP для указанного дерева каталогов. На директиву не влияет, включен или нет безопасный режим.
Указанное значение является префиксом, а не названием директории. Это означает, что open_basedir = /dir/incl позволяет получить доступ к /dir/include и /dir/incls если они существуют. Чтобы ограничить доступ к конкретной директории, используйте завершающий слеш.
open_basedir = /home/users/you/public_html
В некоторых конфигурациях, по крайней мере, в PHP 4.4.8, использование слэш ограничивает доступ только к указанной директории, может заставить Joomla предупреждать JFolder:: создавать: бесконечный цикл обнаружения при сохранении глобальных конфигураций административной части. Это предупреждение срабатывает, поскольку PHP file_exists () не срабатывает, например, при запросе /home/user/public_html/joomla_demo, если существует open_basedir установленный в / /home/user/public_html/joomla_demo/.
Кроме того, если включен open_basedir, может потребоваться установить в конфигурации PHP параметр upload_tmp_dir (указать путь к временной папке), который входит в сферу open_basedir или, наоборот, добавить upload_tmp_dir путь к open_basedir, используя соответствующий разделители пути (слеш) для хост-системы.
open_basedir = /home/users/you/public_html:/tmp
PHP будет использовать временный каталог системы, когда upload_tmp_dir не установлен или когда он установлен, но каталог не существует (не установлен), поэтому может возникнуть необходимость добавить его в open_basedir, как сказано выше, чтобы избежать пересылки ошибки в Joomla.
Отрегулируйте magic_quotes_gpc
Отрегулируйте директиву magic_quotes_gpc, как необходимо для вашего сайта. Рекомендуемое для установки в Joomla! 1.0.x для защиты от плохо написанных сторонних расширений. Самый безопасный метод, включить magic_quotes_gpc, чтобы избежать всех плохо написанного расширений.
Joomla! 1.5 игнорирует этот параметр и прекрасно работает без проблем.
magic_quotes_gpc = 1
Не используйте PHP safe_mode
Избегайте использования safe_mode PHP. Это правильное, но неполное решение более глубокой проблемы и дает ложное чувство безопасности. См. официальный сайт PHP для объяснения этого вопроса.
safe_mode = 0
Не используйте PHP register_globals
Автоматическая регистрация глобальных переменных, вероятно, является одним из неудобных решений сделанных разработчиками PHP. Эта директива определяет, будет ли или не регистрировать EGPCS (Environment, GET, POST, Cookie, Server) переменные, как глобальные переменные, где они сразу же становятся доступны для всех PHP-скриптов, и где они могут легко заменять его собственную переменную, если вы не будете осторожны. К счастью, разработчики PHP давно понял ошибку, и исправили эту «особенность».
Если ваш сайт находится на одном сервере с хостинг-провайдером, который настаивает, чтобы register_globals был включен, это должно вас очень волновать. Хотя вы можете отключать register_globals для своего собственного сайта с локального файла php.ini это обеспечит частичную безопасность, но сайты на том же сервере остаются уязвимыми для атак, которые могут производиться на ваш сайт с сервера.
register_globals = 0
Не используйте PHP allow_url_fopen. Эта опция позволяет заполучить доступ через URL к некоторым объектам, например, файлам. По умолчанию оболочки предназначены для доступа к удаленным файлам с помощью FTP или HTTP-протоколов. Некоторые расширения, такая, как Zlib, может испоьзовать дополнительные оболочки. Примечание: из соображений безопасности такая опция может быть установлена только в php.ini
allow_url_fopen = 0
Самое важное правило:
В случае выхода сайта из строя, вы всегда сможете вернуть его в рабочее состояние, если будете регулярно создавать резервные копии. Будьте уверены в работоспособности вашего бекапа до того, как вы выложите его на сайт. Это самый лучший способ (и часто единственный способ), чтобы оправиться от таких неизбежных катастроф, как:
1. Угроза взлома/взлом сайта.
2. Поломка сайта в результате неправильного обновления.
3. Сбой оборудования, такой как неисправные жесткие диски, перебои в питании, воровство сервера, и т.д.
4. Авторитарное вмешательство правительства. (Более распространенный, чем некоторые думают.)
5. Необходимость быстро переместить сайт на новый сервер или хостинг-провайдер.