扫描PHP上传的病毒

时间:2009-03-18 00:42:52

标签: php upload virus

我目前正在使用以下代码扫描作为申请表一部分上传的文件:

$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!;
}

它有效,但速度很慢。任何人都有任何建议,a)。加快速度和b)。通常改进脚本(例如,我不完全清楚exec()vs system()的好处等)?

如果速度无法提高,那么我最好显示一些临时的“请耐心等待你的文件被扫描”的消息,但我不知道该怎么办。

编辑:对不起,应该说扫描需要在当时完成,因为如果没有有效的(即无病毒)文件,将无法接受相关应用程序。

4 个答案:

答案 0 :(得分:4)

使用clamdscan而不是clamscan。 Clamdscan使用一直运行的内置守护进程,并且不必每次都加载病毒表(如clamscan所做的那样)。

答案 1 :(得分:3)

如果您不需要立即向用户显示结果,可以将文件添加到数据库表中以便以后扫描。

然后,您可以分叉一个新进程来扫描并更新表中的结果。你有一个很好的例子:http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/

如果你绝对需要在同一个请求中显示结果,那么你可以像我之前说的那样完成它,但输出一个通过AJAX请求结果的临时页面;扫描结束后,将用户重定向到结果页面。

如果您不想使用JavaScript,则可以使用简单的元刷新标记。

答案 2 :(得分:1)

设置一个单独的应用程序,理想情况下,在另一个可以批量扫描这些扫描的盒子上。该框可以将其状态更新到您的前端服务可以读取并向用户报告的数据库中。

答案 3 :(得分:1)

要保持最新:现在有一个PHP库正在使用与ClamAV的套接字连接,并且很快就通过PHP初始化文件扫描。

https://github.com/jonjomckay/quahog

请务必使用正确的权限,因为扫描将由clamav用户完成,而不是www-data。