如何自动扫描上传的文件对于病毒使用php-clamavlib

如何使用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上传表单,并使用这些功能来扫描上传的病毒文件。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏