Скрипт для защиты от iframe инклудов и пр.

В связи с частыми жалобами на воровство паролей от фтп с последующим инклудом всякой гадости в скрипты сайтов(iframe, лишние ссылки и пр.), я задумался над тем как бы себя обезопасить от этого..

Вариант Апредупредить.
Вариант хороший, но не всегда выполнимый.
Даже если вы, при каждом подключении к FTP, вводите свой сверхсложный пароль заново, имеете на борту антивирус и фаервол, Ваши скрипты самые защищенные в мире – это еще не значит Вы не имеете соседей по хостингу с дырявыми скриптами или даже дырявого хостера ?)!! .

Вариант Бкак можно раньше узнать.
Если нам уже подсунули какую то заразу, то нам бы захотелось узнать об этом как можно раньше, не так ли? И незамедлительно все поправить! Именно этим способом я и решил воспользоваться.
А именно, на основе старенького плагина от Wordpress я соорудил не сложный скрипт, который сканирует все(или по маске) файлы на хостинге, сохраняет контрольную сумму для каждого и з них, и при каждом новом запуске опять проверяет эти файлы и сверяет их конт. сумму с ранее сохраненной.

Демо

Качаем скрипт.

Инструкция по установке – настройке.
1. Качаем скрипт.
2. Определяемся куда будем закачивать скрипт(можно в корень сайта, можно в папку или подпапку).
3. Открываем скрипт в любом редакторе наш скрипт и изменяем настройки на свои, инструкция по настройкам в комментариях. Не забываем правильно прописать все пути.
4. Если нужно, переименовываем в любое название и закачиваем на hosting.
5. Набираем в браузере адрес _http://вашсайт.com/путь к скрипту/самскрипт.php
6. При первом запуске скрипт просканирует нужные файлы и сохранит контрольную сумму. При последующих запусках он будет показывать изменялись файлы или нет, если изменялись, то какие.
7. Если нужно, можно настроить выполнение скрипта по крону, для этого просто укажите путь к срипту, но в конце скрипта нужно добавить параметр script.php?send=1, и не забудьте вписать правильный емайл для отчетов(замечание: почта отправляется через стандартную функцию PHP – mail, некоторые почтовые сервисы могут воспринимать такие письма как спам, рекомендую сначала убедиться что почта будет приходить, или же самостоятельно дополнить скрипт более продвинутым способом для отправки почты).
В этом случае скрипт будет выполняться без вывода информации, и в случае с измененными файлами отправить е-майл с предупреждением.

Настраиваем скрипт на примере CMS Joomla:
Joomla имеет такую структуру папок:

Структура каталогов CMS Jooml

В данном случае я положил свой скрипт в папку «includes». Соответственно, так и пропишем в настройках скрипта:

$scriptDir = "includes";

Далее, придумываем название для файла в котором будем хранить контрольные суммы:

$md5_file = "mdcache.txt";

Минимальные настройки мы установили, можно сделать первый запуск скрипта.
В появившемся окне в поле «Пароль» вводим «1″ и жмем кнопку «Сбросить/обновить хэш файлов«.

Следующим шагом мы исключим каталоги(отмеченные на картинке желтым) с временными файлами, чтобы избежать ложных предупреждений. Это можно сделать 2 способами:
1. Глобально

$skipDir = "cache|logs|backups|tmp";

В этом случае будут пропускаться все каталоги в названии которых есть слова cache, logs, backups, tmp. например com_cache и т.д.

2. Указываем полный путь к конкретным каталогам.
Для этого – открываем файл с контрольной суммой, в данном случае «mdcache.txt».
Записи будут выглядеть так:

7c39fc964bc1e8201d0150f36d826df1 Z:\home\some.test\www/administrator/cache/index.html
405401240a7b7860012a3da79116f126
Z:\home\some.test\www/administrator/backups/index.html
f54d47a970261af8b3bd15f037c5ea03 Z:\home\some.test\www/cache/index.html
9670bdd1cef57c0045b7dfb2cea7667c Z:\home\some.test\www/administrator/components/com_admin/tmpl/navigation.php

Копируем полный путь к нужным нам папкам, в итоге должно получиться приблизительно так(только пути будут другие):

$skipDir = "Z:\home\some.test\www/administrator/cache|Z:\home\some.test\www/administrator/backups|Z:\home\some.test\www/cache|Z:\home\some.test\www/tmp";

Замечание: путь копировать без слеша(/) в конце.

Остальные настройки по желанию.
Примеры:

$allowDir = "components/com_banners"; //сканировать только корневой каталог и каталог com_banners
или
$allowDir = "components"; // сканировать только корневой каталог и каталог components

$skipFileGlobal = "index.html"; // пропустит все файлы с именем index.html

$skipFile = "Z:\home\some.test\www/components/com_banners/index.html"; // пропустит только файл index.html в папке components/com_banners. Путь к файлу брать из файла с контрольной суммой.

$adminMail, $mail_subject, $adminPassword – E-mail для отчетов, тема письма, пароль для сброса хеша файлов(в md5, генератор – http://artriva.ru/tools/hash/).

На этом все.

*

Скрипт распространяется “как есть”, автор не несет ответственности за вред, причиненный его использованием

Tags: , ,

2 коммент.

Так это для каждого сайта надо устанавливать отдельно этот скрипт?

С серверами дела не имел, не в курсе структуры каталогов.
По идее, можно в любое место кидать лишь бы были права на запуск, скрипт обойдет все каталоги и подкаталоги.