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

Stack

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

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

Спасибо!

Обновить - нашел ответ

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

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

<?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.
}

?>

Ответ 1

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

Ответ 2

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