如何使用php-clamavlib自动扫描病毒的上传文件
版本1.0
作者:Falko Timme
本指南介绍如何通过使用PHP和ClamAV的服务器上的Web表单自动扫描用户上传的文件。 这样,您可以确保您的上传表单不会被滥用来分发恶意软件。 为了粘贴PHP和ClamAV,我们安装了php5-clamavlib / php4-clamavlib软件包,这在这个时候是没有文档的。 该软件包可用于Debian Etch和Sid以及Ubuntu Dapper Drake和Edgy Eft,因此请确保使用这些平台之一。
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
如前所述,您的系统必须使用Debian Etch,Sid,Ubuntu Dapper Drake或Ubuntu Edgy Eft,并且您应该已经安装了Apache2和PHP4或PHP5。
如果您在Debian Sarge上,您可以从backports.org安装php-clamavlib软件包:http: //www.backports.org/debian/pool/main/p/php-clamavlib/
我假设你使用/ var / www
作为默认的文档根。 如果您的服务器上已有多个网站,请根据需要调整文档根目录。 另外,在这个例子中,我使用192.168.0.100
作为我的服务器的IP地址。 调整这一点,如果您有多个具有基于名称的虚拟主机配置的网站,则必须使用相应的域/ FQDN访问网站而不是IP地址。
我以root用户身份执行所有步骤。 所以请确保您以root用户身份登录,或者如果您在Ubuntu上,请使用sudo
(例如)来填写所有命令
apt-get update
会成为
sudo apt-get update
2修改/etc/apt/sources.list
如果您使用Ubuntu Dapper Drake或Ubuntu Edgy Eft
,则必须修改/etc/apt/sources.list
,以便启用Universe
存储库。 如果您使用的是Debian Etch或Sid,那么不要编辑/etc/apt/sources.list
。
2.1 Ubuntu Dapper Drake
编辑/etc/apt/sources.list
,并确保你的行http://de.archive.ubuntu.com/ubuntu/ dapper宇宙
(其中替换de.archive.ubuntu.com
与您的Ubuntu镜像关闭给你):
vi /etc/apt/sources.list
[...] deb http://de.archive.ubuntu.com/ubuntu/ dapper universe [...] |
然后跑
apt-get update
更新包数据库。
2.2 Ubuntu Edgy Eft
编辑/etc/apt/sources.list
,并确保你的行http://de.archive.ubuntu.com/ubuntu/ edgy universe
(替换de.archive.ubuntu.com
与您的Ubuntu镜像关闭给你):
vi /etc/apt/sources.list
[...] deb http://de.archive.ubuntu.com/ubuntu/ edgy universe [...] |
然后跑
apt-get update
更新包数据库。
3安装ClamAV和php-clamavlib
接下来,我们安装ClamAV(我们的病毒扫描程序)和php-clamavlib,该软件包提供PHP和ClamAV之间的粘合。
如果您使用PHP5,请运行:
apt-get install php5-clamavlib clamav clamav-freshclam clamav-docs arj unzoo
如果您使用PHP4,请运行:
apt-get install php4-clamavlib clamav clamav-freshclam clamav-docs arj unzoo
然后重新启动Apache:
/etc/init.d/apache2 restart
如果你喜欢你可以看看你的php.ini
(如果你使用PHP5,/ etc/
php5/ apache2/
php.ini
,如果你使用PHP4,/ etc/php4/apache2/
php.ini
)看看是否有条目对于php-clamavlib。 这些应该是这样的:
vi /etc/php5/apache2/php.ini
[...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |
vi /etc/php4/apache2/php.ini
[...] extension=clamav.so [clamav] clamav.dbpath=/var/lib/clamav clamav.maxreclevel=0 clamav.maxfiles=0 clamav.archivememlim=0 clamav.maxfilesize=0 clamav.maxratio=0 |
如果您在Debian Sarge上,您可以从backports.org安装php-clamavlib软件包:http: //www.backports.org/debian/pool/main/p/php-clamavlib/
4 php-clamavlib函数
没有关于php-clamavlib提供的PHP函数的文档,但是我在php-clamavlib的源代码中找到了一个名为clamav.php
的脚本,显示哪些功能可用。 我们现在在/ var / www
目录中创建相同的脚本:
vi /var/www/clamav.php
<?php if(!extension_loaded('clamav')) { dl('clamav.' . PHP_SHLIB_SUFFIX); } $module = 'clamav'; $functions = get_extension_funcs($module); echo "Functions available in the test extension:<br>\n"; foreach($functions as $func) { echo $func."<br>\n"; } echo "<br>\n"; $function = 'confirm_' . $module . '_compiled'; if (extension_loaded($module)) { $str = $function($module); } else { $str = "Module $module is not compiled into PHP"; } echo "$str\n"; ?> |
现在在浏览器中输入http://192.168.0.100/clamav.php
。 输出应如下所示:
Functions available in the test extension:
cl_info
cl_scanfile
cl_scanbuff
cl_setlimits
cl_scanfile_ex
cl_scanbuff_ex
cl_pretcode
clam_scan_buffer
clam_scan_file
clam_get_version
Fatal error: Call to undefined function confirm_clamav_compiled() in /var/www/clamav.php on line 14
您可以忽略最后一行的致命错误。
现在我们知道哪些功能可用,但是我们不知道他们需要哪些参数。 我发现这个页面: http : //www.clamav.net/doc/0.88.4/html/node41.html ,它描述了ClamAV的源代码中的类似功能。 通过测试和阅读该页面,我发现如何使用cl_info()
, cl_scanfile()
, cl_setlimits()
和clam_get_version()函数
。 这是我们扫描上传文件的所有功能(实际上我们只需要cl_scanfile()
)。 在下一章中,我们将创建一个小型HTML上传表单,并使用这些功能来扫描上传的病毒文件。