Мир свободного программного обеспечения чуден и прекрасен. Особенно отрадно, когда добрые люди уже написали какой-нибудь велосипед и тем самым освободили тебя от тяжкой неблагодарной работы. Один из таких велосипедов - WYSIWYG-редактор
Spaw2, который я использовал в паре проектов.
Напасть подкралась незаметно: через несколько лет использования велосипеда на сервере обнаружились подозрительные php-файлы с зашифрованным содержимым. Содержимое было легко расшифровано и обнаружился вполне себе целенький бэкдор.
Технология проста:
- Злоумышленники пронюхали, что Spaw2 позволяет загружать на сервер файлы. Авторизации на такую загрузку по-умолчанию не требуется.
- Извлекли характерную сигнатуру Spaw2 и стали прозванивать какой-нибудь список сайтов. Т.к. Spaw2 в меру популярен, то рано или поздно найдутся его инсталляции на чужих серверах.
- Затем обращаются по "волшебному" адресу и ... получают окно для загрузки файлов на чужой сервер.
- Загружают на сервер бэкдор, троянца или еще какую-нибудь гадость. Профит.
Залатать несчастного Spaw2 не сложно.
Вариант 1. Добавляем проверку в коде.
Входной точкой для загрузки файлов является скрипт /spaw2/dialogs/dialog.php. Внутри он опосредованно подключает к себе конфиг. В конфиг и добавляем небольшую проверку на авторизацию действия: "если ломится супостат, то...".
Вариант 2. Закрываем скрипт загрузки базовой авторизацией.
А чо, вполне удобно, если Spaw2 используется только в админке, и админка уже закрыта базовой авторизацией. Закрывать нужно папку /spaw2/dialogs/, а /spaw2/uploads/ оставить доступной, чтобы не перекрыть доступ к загруженным файлам.
Ну и реальным пацанам: имейте политику безопасности, не внедряйте в проект говнокод, будьте чётки и всегда при семках. И прийдет к вам Успех :)