Вирусы · 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-форму загрузки и используем эти функции для сканирования загруженных файлов на вирусы.
Get new posts in your inbox
No spam. Unsubscribe anytime.