php Простая защита сайта от вирусов 

Дата публикации  Дата изменения22.01.16  Комментарии7   Просмотры2909

Простейшая фильтрация входящих данных, must have для любого сайта на php везде и всегда.
Стоит уделить совсем немного времени ДО того, как сайт пострадает от вирусных проблем, чем потом долго и нудно чистить его, двигаясь по пунктам бесконечной и мудреной инструкции.

1. Узнайте абсолютный путь к папке сайта. Для этого положите в папку сайта файл с длиннейшим абракадаберным названием, например Ndjcwi-JDsw783hgS-QG_QGW.php, со следующим содержанием:

<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>

Затем перейдите по ссылке http://ваш_сайт/Ndjcwi-JDsw783hgS-QG_QGW.php

Отобразится что-то вроде /var/www/vhosts/moysait/httpdocs/ – это и будет абсолютный путь к папке сайта. Запишите себе этот путь, и удалите наш абракадаберный файл.

2. Создайте папку filter на уровень выше чем папка сайта, она должна быть рядом с папкой сайта. И положите в эту папку файл prfilter.php следующего содержания:

<?php
$patt = "~\<\?~i";

if (is_array($_FILES)) {
foreach($_FILES as $anystring=>$file_data) {
if (preg_match($patt,file_get_contents($file_data['tmp_name']))) die("denied by antivirus-alarm 3");
}
}

$patt = "~\/\.\.\/\.\.\/\.\.\/|{0-9a-zA-Z}[80]|eval[^\(]*\(|include[^\(]*\(|base64_decode[^\(]*\(|stripslashes[^\(]*\(|strip_tags[^\(]*\(|fopen[^\(]*\(|chmod[^\(]*\(|chown[^\(]*\(|chgrp[^\(]*\(|unlink[^\(]*\(|unset[^\(]*\(|fgetc[^\(]*\(|fgets[^\(]*\(|file_get_contents[^\(]*\(|file_put_contents[^\(]*\(|fwrite[^\(]*\(|move_uploaded_file[^\(]*\(|is_uploaded_file[^\(]*\(|rmdir[^\(]*\(|fromCharCode[^\(]*\(|tmpfile[^\(]*\(|tempnam[^\(]*\(|phpinfo[^\(]*\(|basename[^\(]*\(|curl_init[^\(]*\(|socket_create[^\(]*\(|popen[^\(]*\(|exec[^\(]*\(|system[^\(]*\(|passthru[^\(]*\(|proc_open[^\(]*\(|gzuncompress[^\(]*\(|shell_exec[^\(]*\(|delete from|insert into~i";

foreach ($_REQUEST as $v1x1) prfilter_x1($v1x1,$patt);
function prfilter_x1($v1x1,$patt) {

ob_start();
if (is_array($v1x1)) {
foreach ($v1x1 as $vx) prfilter_x1($vx,$patt);
}
else {
if ( preg_match($patt, $v1x1) || preg_match($patt, stripslashes($v1x1) ) ) die("denied by antivirus-alarm 1");
if ( preg_match($patt, base64_decode($v1x1) ) || preg_match($patt, stripslashes(base64_decode($v1x1) ) ) ) die("denied by antivirus-alarm 2");
}
ob_end_clean();

}
?>

3. Откройте файл .htaccess лежащий у вас в корне сайта, и добавьте вверху строку:

php_value auto_prepend_file /var/www/vhosts/moysait/filter/prfilter.php
Вместо /var/www/vhosts/moysait/httpdocs/ надо, конечно, поставить свой абсолютный путь, который мы выясняли в п.1

4. Проверяем, теперь по адресу http://ваш_сайт/?x=eval() должно быть сообщение: "denied_by antivirus-alarm 1". Также смотрим по http://ваш_сайт/ – всё должно работать по прежнему.

5. Если при работе в админке сайта вам не к месту выдается сообщение "denied_by antivirus-alarm" – обратитесь к своему вебмастеру или программисту, чтобы подкорректировать фильтр для вашего конкретного случая. Не отключайте фильтр, обзательно используйте его постоянно – он защищает ваш сайт не только от известных угроз, но и от тех, что могут появиться в будущем.

  • Также рекомендуется:
  1. Делать резервное копирование сайта самостоятельно, а также следить за тем, что хостеры его тоже делают;
  2. Отказаться от использования FTP, использовать только SFTP;
  3. Если ваш хостер не предоставляет вам SSH доступ к сайту, и вы из-за этого не можете делать бэкапы самостоятельно, и не может использовать SFTP – поменяйте хостера;
  4. Используйте лицензионные и только лицензионные CMS для своего сайта. Не обязательно платные;
  5. Следите за выходом новостей и заплаток для вашей CMS на официальном сайте поддержки этой CMS;
  6. Скачивайте архив для установки CMS и любых плагинов только с официальных сайтов, и следите за новостями об уязвимости этих плагинов;
  7. Если у вас используются утилиты наподобие phpMyAdmin, помещайте их в папки с неочевидными, лучше всего длинными и абракадаберными названиями, наподобие wfqmwkmuSKIwefuihDksdjf – это препятствует их нашариванию;
  8. Ограничивайте доступ к админке сайта, утилитам, наподобие phpMyAdmin и другим инструментам управления сайтом, по ip;
  9. Используте очень длинные, абракадаберные и полные кракозябликов пароли, наподобие 447duIDJfwIW0112ShdsQ_Q_WAED--^kasjG7QAQ;
  10. Храните пароли в текстовом или вордовском файле, а не в "запоминалке" паролей вашего броузера или файловой программы.


 Источник 

Бесплатные курсы

Категории

Теги: , , , , , , ,

Оцените материал:

Рейтинг: 7.8/10 (4)


КомментарииКомментарии:

    Николай

     

    А кто делает именно этот скрипт? не пускает вирус или как

    coder.hol.es /* Админ */

     

    Он не позволяет выполнять опасные запросы/обращения к сайту по любым методам (POST, GET, HEAD и т.д.), даже если исходный код сайта содержит уязвимости. И если у желающих взломать/внедрить что в сайт нет доступа/паролей к вашему серверу/сайту/БД (админка, ftp, ssh и т.д.), то обеспечивает эффективную защиту, типа firewalla. Конечно, он не лечит, но его стоит ставить и при зараженном сайте и лечении. Подробнее по лечению: Удалить вирус с сайта самостоятельно http://coderhs.com/archive/delete_virus

    Dzmitry Roshchyn

     

    Огромная благодарность автору, установил по инструкции, все работает.

    coder.hol.es /* Админ */

     

    Вам благодарность за добрые слова) – авторство принадлежит источнику (кнопка "Источник" внизу материала).

    grbit

     

    У меня просто слов нет, нашёл эту штуку на сайте у клиента. Он тоже жаловался что картинки не загружают. Руки надо отрывать за такие проверки БЛЖАД!!11!#"!; Такая регулярка "\<\?~i" сработает положительно на 90 картинок, проверять из на такое это дебилизм, уж простите меня. Человек кроме всего поставил флаг caseless, т.е. одинаковая чувствительность к большим и маленьким буквам, при том что в регулярке вообще букв нет. Только абсолютно безмозглый человек может так проверять загружаемые файлы. Стоит отключить на сервере short_open_tag а проверку исправить хотя бы на такую "~\<\?php[ a-zA-Z0-9]{5}" и то я думаю ложные срабатывания будут


Поля, обозначенные как *, обязательны.





Максимальная длина сообщения 900 символов. Осталось   символов

 

Старые →← Новые