Динамическое выполнение ClamAV clamscan при загрузке файлов с помощью PHP - PullRequest
11 голосов
/ 04 октября 2011

Stack

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

Если предположить, что файл, который я отправляю в этот скрипт загрузки 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-оболочки, а также традиционные старые добрые вредоносные программы?

Спасибо!

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

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

Для тех, кто придет после. Я протестировал этот скрипт, используя файл вируса EICAR http://eicar.org/86-0-Intended-use.html, и после нескольких настроек он работает. Возвращаемая переменная $ int говорит о том, что файл безопасен или нет. Если $ 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 ]

8 голосов
/ 13 апреля 2013

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

1 голос
/ 04 октября 2011

Просто будь осторожен. Если ваш 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)
...