Как защитить сайт на DLE от взлома
Пост не совсем в тему на этом блоге, но кому-нибудь он может помочь, поэтому и публикую его тут.
DataLifeEngine (DLE) это популярная CMS, с которой работает довольно много людей. Но у неё есть один небольшой недостаток – за DLE её создатели хотят денег… Поэтому многие пользователи, не имея возможности/желания оплатить лицензию качают нуленные (ломанные) версии движка. И иногда так случается, что в этих архивах спрятаны бекдоры, используя которые, их авторы могут получить полный контроль над вашим сайтом.
Пишу я об этом не просто так – как оказалось, минимум два моих сайта, созданных на этой CMS, были взломаны подобным способом (да, я использую nulled версии… ). Нужно заметить, что взломщик не стал ничего ломать на сайтах, а просто сделал себе возможность размещать на моих сайтах свои ссылки (возможно, и не свои, а ссылки бирж).
А начиналось все так – год-два назад на одном своем сайте (догадайтесь, на каком двигле? ), на морде я обнаружил пару внешних ссылок, которых там быть не должно было (ссылки были спрятаны – синий шрифт на синем фоне). Тогда я восстановил сайт из бекапа (ссылки пропали), сменил пароли на админку и ftp и на этом успокоился (сайт не торгует в биржах, поэтому количество внешних ссылок почти никогда не смотрю).
Пару месяцев назад на другом сайте (хостинги у них разные), торгующем в сэйпе, все проданные ссылки упали в error, полез разбираться, смотрю – а у меня в шаблоне main.tpl какой-то лишний тег стоит ({lb} вроде бы). Убрал его, почистил index.php из корня сайта (он тоже был изменен), удалил файл сапы links.db и ссылки снова появились на сайте. После этого сменил пароли и ушел спокойно спать. Но на следующее утро опять та же картина – все ссылки в error`e, индексный файл и файл шаблона опять так же модифицированы… Причем, под одним ftp доступом на этом хостинге был доступен ещё один сайт, торгующий в сэйп, и у него все ссылки были в статусе ок… После пары дней ненапряженных раздумий, переписки с саппортом хостинга и поисков в интернет, был сделан вывод, что для взлома сайта используется бекдор, спрятанный в одном из файлов движка, причем используется он роботом (почти в одинаковое время, как я потом заметил, изменялись файлы сайта). Тогда я был очень занят и сильно морочится этим не было ни времени, ни желания, поэтому я просто раз в день восстанавливал файлы сайта, а поиск бекдора был отложен на неопределенное время…
Прошел месяц, а может и два, и тут на первом сайте из этого поста возникла необходимость смены шаблона, был поставлен новый шаблон, но на следующий день он волшебным образом превратился в старый (то есть, был заменен весь html код в файле main.tpl нового шаблона на код старого, и сайт выглядел просто ужасно)! И опять появились те самые две лишние внешние ссылки на морде.
Именно тогда я решил заняться решением этой проблемы вплотную. И вот что было выяснено – бекдоры обычно кладут в папку engine движка DLE, они могут быть отдельным файлом, или находится в каком-то файле движка, могут быть в любой папке. Но, что бы воспользоваться бекдором, файлу, в котором он находится, должно быть разрешено выполнять php код по обращению пользователей (как то невнятно объясняю, но я и сам не силен в теории). В DLE уже есть защита от этого (которая, в принципе, легко убирается злоумышленниками ещё до того, как нуленная версия движка ушла в паблик) – если в файле htaccess какой-либо папки есть инструкции:
Order allow,deny
Deny from all
то обращения пользователей к любым файлам из этой папки будут блокироваться, использовать их сможет только ваш сервер/движок. Так же, если в файле DLE есть строки
if (! defined ( ‘DATALIFEENGINE’ )) {
die ( «Hacking attempt!» );
}
то они действуют аналогичным образом – не разрешают прямое обращение к содержащему их файлу.
То есть, в принципе можно довольно легко решить проблему, не вникая как и что сломано – положить в папку engine htaccess с нужным нам содержимым и всё, враг не пройдет. Но, тогда перестают работать некоторые функции движка (генерация капчи, rss – больше пока не нашел). Значит, нам нужно разрешить прямое обращение к некоторым файлам. В общем, на втором сайте в папке engine я сделал такой файл htaccess:
<FilesMatch «\.(php|php3|php4|php5|php6|phtml|phps)$|^$»>
Order allow,deny
Deny from all
</FilesMatch><Files rss.php>
Order allow,deny
allow from all
</Files>
(запретил прямой доступ к файлам, содержащим php код и разрешил доступ к фалу, выдающему rss)
А в папке engine/modules файл получился таким (разрешил доступ к файлу с капчей):
<FilesMatch «\.(php|php3|php4|php5|php6|phtml|phps)$|^$»>
Order allow,deny
Deny from all
</FilesMatch><Files antibot.php>
Order allow,deny
allow from all
</Files>
И о чудо! Файлы сайта перестали модифицировать без моего ведома!
Воодушевленный успехом, я разместил эти два htaccess`a на первом сайте из этого поста, но там ни капча, ни РСС работать не стали… Видимо, другие настройки сервера, или у меня руки кривоваты… В общем, там пришлось искать бекдор. Оказалось, что он находится в файле initme.php (файл не от движка, в нем много всего закодированного в base64). В итоге, я запретил в htaccess доступ только к этому файлу (если его просто удалить, то выскакивает ошибка, а чистить все файлы, которые могут к нему обращаться, мне просто лень:) ):
<Files initme.php>
Order deny,allow
deny from all
</Files>
Сайт из второго примера пока ещё не прошел проверку временем, возможно, придется ставить дополнительную защиту.
На этом хочу закончить, надеюсь, что кому то пригодится мой опыт в борьбе со взломом сайтов на DLE.
А у вас взламывали сайты? Как вы с этим боролись?
UPD 02/12/2011 11:42 В комментах подсказали наилучший выход, о котором я забыл упомянуть – покупайте лицензию, и ставьте оригинальную сборку DLE и будем вам счастье!
Похожие материалы
-
http://twitter.com/24uzlaru Шириазданов Газинур
-
http://antonblog.ru/ Anton
-
-
SeoUm
-
http://antonblog.ru/ Anton
-
-
http://seogang.ru/ Seogang
-
http://antonblog.ru/ Anton
-
-
SeoUm
-
http://gadgetall.ru Gesik
-
Белофф
-
Nazamok
-
http://seofaqs.ru SeoFaqs
-
http://twitter.com/zxerxp Красавин Сергей
-
http://seolost.ru/ SeoLost