Динамический запуск clamscan ClamAV на загрузку файлов с помощью PHP

стек

Я хочу сканировать каждый файл, который загружается через мой скрипт загрузки php с помощью инструмента clamscan Clam anti-virus. Я думаю, что у меня есть хороший сценарий, но я хотел запустить его мимо вас, ребята.

Итак, предполагая, что файл, который я отправляю в этот скрипт загрузки php, называется "uploadedfile", имеет ли смысл следующий код?

<?php

$safe_path = escapeshellarg('/tmp/' . $_FILES['uploadedfile']['tmp_name']);
$command = 'clamscan ' . $safe_path;
$out = '';
$int = -1;
exec($command, $out, $int);

if ($int == 0) {
   // all good, code goes here uploads file as normal IE move to
permanent directory etc;
} else {
   unlink('/tmp/' . $_FILES['uploadedfile']['tmp_name']);
header(Location: http://www.domain.com/uploadform.php?error=your-file-was-infected-pal);
}

?>

кроме того, clamscan найдет PHP-оболочки, а также традиционные старые добрые вредоносное ПО?

спасибо!

обновление-найден ответ

Я ответил на свой вопрос, но у меня нет репутации, чтобы официально сделать это. Вот Ансер:

для тех, кто придет после. Я протестировал этот скрипт, используя тестовый файл вируса EICARhttp://eicar.org/86-0-Intended-use.html и после нескольких настроек он работает. Вернуть переменную $инт-это то, что говорит вам, является ли файл безопасным или нет. Если $int равен 0, вирус не был найдено, если $int равно 1, вирус был найден. Однако есть некоторые изменения, которые мне пришлось сделать, чтобы скрипт работал (я обновил переменную $safe_path, чтобы быть правильным), вот рабочий скрипт:

<?php

$safe_path = escapeshellarg($_FILES['uploadedfile']['tmp_name']);
$command = 'clamscan ' . $safe_path;
$out = '';
$int = -1;
exec($command, $out, $int);

if ($int == 0) {
   // all good, code goes here uploads file as normal IE move to
permanent directory etc;
} else {
  //whatever you need to do if a virus is found.
}

?>

2 ответов


обратите внимание, что если ваш сервер запускает демон clamav (clamd), можно использовать clamdscan вместо clamscan, как предложено, это использование быстрее, так как использовать сигнатуры вирусов, уже загруженные clamd.


просто будьте осторожны. Если ваш clamscan устареет, вы получите обратную связь на выходе:

это будет выглядеть так:

LibClamAV Warning: ***********************************************************
LibClamAV Warning: ***  This version of the ClamAV engine is outdated.     ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************

также в зависимости от версии clamscan "результат" может выглядеть так (и вам нужно будет разобрать его соответственно):

[filename]: OK

----------- SCAN SUMMARY -----------
Known viruses: x
Engine version: x.x.x
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: x.xx MB
Data read: x.xx MB (ratio 0.00:1)
Time: x.xx sec (0 m x s)