3

我允许用户上传相册之类的照片,并将文件(现在是文档)作为邮件附件进行附加。所以我假设我需要一些防病毒/安全工具来首先扫描文件,以防人们上传受感染的东西。所以有两个问题:1)我可以使用或集成到我的环境中是否有任何“免费”或开源工具:codeignitor php?2) 如何保护上传区域不受系统其他部分的影响?假设病毒扫描程序未能捕获病毒并被上传,如何防止它感染其他文件?比如上传区域是否可以被沙箱化或总是使用该文件路径让用户访问内容,这样它就不会传播到系统的其他部分?

4

2 回答 2

2

免费的病毒扫描程序有clamav。安装它,您可以执行以下操作:

function virus_detected($filename)
{
        $clamscan = "/usr/local/bin/clamscan";
        $result = exec("$clamscan -i --no-summary $filename");
        return strlen($result)?true:false;
}

至于安全性,请确保将临时文件上传到 Web 根目录之外的目录。然后,您应该验证文件类型,将文件重命名为原始文件名以外的名称,并附加适当的扩展名(gif、jpg、bmp、png)。我相信除了 php 本身的漏洞之外,这应该让你相当安全。

有关在 php 中验证文件类型的更多信息,请查看: http ://www.php.net/manual/en/function.finfo-file.php

于 2011-02-09T18:34:29.140 回答
1

我知道这个话题已经三年没有活跃了,但是,如果将来有其他人同样正在寻找基于 PHP 的反病毒解决方案,对于那些没有反病毒守护程序、程序或实用程序的人安装在他们的主机上,并且无法安装防病毒守护程序、程序或实用程序phpMussel,这是我基于 ClamAV 编写的 PHP 脚本,符合 Rohit(原始海报)正在寻找的内容(一种基于 PHP 的防病毒软件,用于保护其 CMS 免受恶意文件上传),可能是一个可行的解决方案。它当然不是完美的,我不能保证它会捕获所有东西,但到目前为止,它肯定比什么都不使用要好。

理想情况下,正如马特上面已经建议的那样,调用 shell 让 ClamScan 扫描文件上传绝对是一个理想的解决方案,如果这是主机管理员、网站管理员或 Rohit 情况下的任何人能够做到的事情,我d 完全支持该建议。我所写的,因为它是一个 PHP 脚本,对任何完全依赖 PHP 来运行的东西都有固有的限制,但是,在上述建议和/或类似建议不可能的情况下(例如,如果主机没有安装防病毒软件并且外壳访问被禁用;常见于更便宜的共享托管解决方案),这就是我在这里建议可能介入的地方 - 只需要安装 PHP 的东西(使用 PCRE包括扩展,

还要记住,正如马特已经建议的那样,始终在根目录之外上传,以确保上传的文件不会被攻击者利用(例如,如果攻击者试图通过上传后门或木马来破坏您的系统) - 病毒不是您需要担心的唯一威胁,现在绝大多数反病毒解决方案不仅仅关注病毒。Matt 也完全正确地指出,没有防病毒解决方案是完美的,因此,任何允许将文件上传到其网站或服务器的人都需要保持警惕 - 防病毒解决方案是任何人的必备品情况,但不存在涵盖所有可能威胁的互联网安全圣杯。此外,重命名文件不仅仅是为了确保它们可以“

关于可能是恶意文件被防病毒解决方案遗漏的威胁,然后可能感染它们上传到的系统;在这种情况下,主机管理员或网站管理员可能会做的事情是采用某种快速简单的编码过程,使文件无法由系统本身执行,但可以通过负责调用的 PHP 脚本轻松轻松地逆转该文件应要求提供,例如通过使用 base64_encode()、bin2hex(),或者甚至只是旋转几个字符并添加盐来替换文件的幻数或类似的东西。

于 2015-01-19T09:06:03.680 回答