Проверять загрузку PHP на вирусы - PullRequest
2 голосов
/ 18 марта 2009

В настоящее время я использую следующий код для сканирования файлов, которые были загружены как часть формы заявки:

$safe_path = escapeshellarg($dir . $file);
$command = '/usr/bin/clamscan --stdout ' . $safe_path;
$out = '';
$int = -1;
exec($command, $out, $int);

if ($int == 0) {
    // all good;
} else {
    // VIRUS!;
}

Работает, но медленно. Кто-нибудь получил какие-либо предложения, которые будут). ускорить вещи и б). улучшить сценарий вообще (например, я не совсем понимаю преимущества exec () против system () и т. д.)?

Если скорость не может быть улучшена, то в идеале я хотел бы отобразить какое-то временное сообщение «Пожалуйста, наберитесь терпения, ваши файлы сканируются», но я не уверен, как это сделать.

РЕДАКТИРОВАТЬ: Извините, должен был сказать, что сканирование должно быть сделано в то время, как рассматриваемое приложение не будет принято без действительных (то есть без вирусов) файлов.

Ответы [ 4 ]

4 голосов
/ 23 сентября 2011

Используйте clamdscan вместо clamscan. Clamdscan использует встроенный демон, который работает постоянно, и ему не нужно каждый раз загружать таблицы вирусов (как это делает clamscan).

3 голосов
/ 18 марта 2009

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

Затем вы можете запустить новый процесс для сканирования и обновления результатов в таблице. У вас есть хороший пример здесь: http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/.

Если вам абсолютно необходимо отобразить результаты в рамках одного и того же запроса, то вы можете сделать это точно так, как я сказал ранее, но вывести временную страницу с запросом результатов через AJAX; после завершения сканирования перенаправьте пользователя на страницу результатов.

Если вы не хотите использовать JavaScript, то простой мета-тег обновления сработает.

1 голос
/ 28 сентября 2016

Чтобы поддерживать это в актуальном состоянии: сейчас есть библиотека PHP, которая использует сокетное соединение с ClamAV и довольно быстро инициализирует сканирование файлов через PHP.

https://github.com/jonjomckay/quahog

Обязательно используйте правильные разрешения, потому что сканирование будет выполняться пользователем clamav, а не www-data.

1 голос
/ 18 марта 2009

Создайте отдельное приложение, в идеале на другом боксе, где вы можете пакетировать эти сканы. Этот блок может обновлять свой статус в базе данных, где ваш веб-сервис может читать и сообщать пользователю.

...