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