Вирусы · 3 min read · Oct 27, 2025

Как автоматически сканировать загруженные файлы на вирусы с помощью php-clamavlib

Как автоматически сканировать загруженные файлы на вирусы с помощью php-clamavlib

Версия 1.0
Автор: Фалко Тимме

Этот гид описывает, как вы можете автоматически сканировать файлы, загруженные пользователями через веб-форму на вашем сервере с использованием PHP и ClamAV. Таким образом, вы можете убедиться, что ваша форма загрузки не будет использована для распространения вредоносного ПО. Чтобы связать PHP и ClamAV, мы устанавливаем пакет php5-clamavlib/php4-clamavlib, который в настоящее время довольно плохо документирован. Этот пакет доступен для Debian Etch и Sid, а также для Ubuntu Dapper Drake и Edgy Eft, поэтому убедитесь, что вы используете одну из этих платформ.

Я хочу сказать сначала, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

Как я уже сказал, ваша система должна использовать Debian Etch, Sid, Ubuntu Dapper Drake или Ubuntu Edgy Eft, и у вас уже должны быть установлены Apache2 и PHP4 или PHP5.

Если вы на Debian Sarge, вы можете установить пакет php-clamavlib из backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/

Я предполагаю, что вы используете /var/www в качестве корневого каталога документа. Если у вас уже есть несколько веб-сайтов на вашем сервере, настройте корневой каталог документа в соответствии с вашими потребностями. Также я использую 192.168.0.100 в качестве IP-адреса моего сервера в этом примере. Настройте это также, и если у вас есть несколько веб-сайтов с конфигурацией виртуального хоста на основе имени, вы должны использовать соответствующий домен/FQDN для доступа к веб-сайту вместо IP-адреса.

Я выполняю все шаги здесь как пользователь root. Поэтому убедитесь, что вы вошли как root или, если вы на Ubuntu, добавьте ко всем командам sudo, например.

apt-get update

это станет

sudo apt-get update  

2 Измените /etc/apt/sources.list

Если вы используете Ubuntu Dapper Drake или Ubuntu Edgy Eft, вы должны изменить /etc/apt/sources.list, чтобы включить репозиторий universe. Если вы на Debian Etch или Sid, то не редактируйте /etc/apt/sources.list.

2.1 Ubuntu Dapper Drake

Отредактируйте /etc/apt/sources.list и убедитесь, что у вас есть строка deb http://de.archive.ubuntu.com/ubuntu/ dapper universe (замените de.archive.ubuntu.com на ваш ближайший к вам зеркальный сервер Ubuntu):

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |

Затем выполните

apt-get update

чтобы обновить базу данных пакетов.

2.2 Ubuntu Edgy Eft

Отредактируйте /etc/apt/sources.list и убедитесь, что у вас есть строка deb http://de.archive.ubuntu.com/ubuntu/ edgy universe (замените de.archive.ubuntu.com на ваш ближайший к вам зеркальный сервер Ubuntu):

vi /etc/apt/sources.list

| [...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |

Затем выполните

apt-get update

чтобы обновить базу данных пакетов.

3 Установите ClamAV и php-clamavlib

Далее мы устанавливаем ClamAV (наш вирусный сканер) и php-clamavlib, пакет, который обеспечивает связь между PHP и ClamAV.

Если вы используете PHP5, выполните:

apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Если вы используете PHP4, выполните:

apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo 

Затем перезапустите Apache:

/etc/init.d/apache2 restart

Если хотите, вы можете взглянуть на ваш php.ini ( /etc/php5/apache2/php.ini, если вы используете PHP5, /etc/php4/apache2/php.ini, если вы используете PHP4), чтобы увидеть, есть ли записи для php-clamavlib. Они должны выглядеть так:

vi /etc/php5/apache2/php.ini

| [...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |

vi /etc/php4/apache2/php.ini

| [...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |

Если вы на Debian Sarge, вы можете установить пакет php-clamavlib из backports.org: http://www.backports.org/debian/pool/main/p/php-clamavlib/

4 Функции php-clamavlib

Нет документации о функциях PHP, предоставляемых php-clamavlib, но я нашел скрипт под названием clamav.php в исходном коде php-clamavlib, который показывает, какие функции доступны. Мы создаем тот же скрипт сейчас в нашем каталоге /var/www:

vi /var/www/clamav.php

| \n"; foreach($functions as $func) { echo $func."
\n"; } echo "
\n"; $function = 'confirm_' . $module . '_compiled'; if (extension_loaded($module)) { $str = $function($module); } else { $str = "Модуль $module не скомпилирован в PHP"; } echo "$str\n"; ?>
|

Теперь введите http://192.168.0.100/clamav.php в вашем браузере. Вывод должен выглядеть так:

Функции, доступные в тестовом расширении:
cl_info
cl_scanfile
cl_scanbuff
cl_setlimits
cl_scanfile_ex
cl_scanbuff_ex
cl_pretcode
clam_scan_buffer
clam_scan_file
clam_get_version

Фатальная ошибка: Вызов неопределенной функции confirm_clamav_compiled() в /var/www/clamav.php на строке 14

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

Теперь мы знаем, какие функции доступны, но мы не знаем, какие параметры им нужны. Я нашел эту страницу: http://www.clamav.net/doc/0.88.4/html/node41.html, которая описывает аналогичные функции в исходном коде ClamAV. Путем тестирования и чтения этой страницы я узнал, как использовать функции cl_info(), cl_scanfile(), cl_setlimits() и clam_get_version(). Это все функции, которые нам нужны для сканирования загруженных файлов (на самом деле нам нужна только cl_scanfile()). В следующей главе мы создадим небольшую HTML-форму загрузки и используем эти функции для сканирования загруженных файлов на вирусы.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.