В последнее время распространена проблема автоматизированного взлома сайтов на известных CMS. Целью взлома обычно является: рассылка с сайта спама и размещение ссылок на внешние ресурсы. Несмотря на то, что проблема обычна вызвана уязвимостями в самой CMS, она может быть решена в общем виде.
Для решения как минимум нужно обеспечить условия:
- Исполняемый код должен быть защищен от записи от пользователя веб-сервера. Наиболее очевидный вариант как это сделать: назначить ему
owner:group
другого пользователя, от которого и работать с кодом на запись, а веб-серверу оставить права только на чтение. - Запретить исполнение кода во всех директориях разрешенных на запись от веб-сервера (контент, кеш и подобные).
- Забыть про ftp и не сохранять пароли в файловых менеджерах. Взамен пользоваться scp/sftp, желательно с авторизацей по ключу.
- Для разных virtual hosts использовать разных системных пользователей, которые не читают данные друг друга.
Первый пункт из вышеприведенных гарантирует сохранность кода, даже в движке с дырами или бэкдором. Второй затрудняет исполнение залитых файлов: их можно исполнить с помощью include()
, но для этого в read-only коде должна быть такая возможность (которая по сути является бэкдором).
Кроме этого, желательно:
- Ограничить доступ в административные части сайта по IP-адресам на уровне веб-сервера только с рабочих компьютеров. Способ помогает даже при компрометации паролей, а также при человеческих конфликтах.
- Использовать SSL-соединения (с префиксом https://) для входа в административные части и везде, где используется пароль для входа. Это защитит от компрометации паролей и данных по каналам связи, например при работе по незащищённому вайфаю.
- Если точек входа на сайт небольшое количество, разрешить использовать только их, остальное запретить.