我允许用户上传照片相册等照片,并附加文件(现在的文件)作为邮件附件。所以我假设我需要一些反病毒/安全工具来扫描文件,以防人们上传受感染的东西。所以有两个问题: 1)是否有任何“免费”或开源工具,我可以使用或集成到我的环境中:codeignitor php? 2)如何保护系统其他部分的上传区域?说病毒扫描程序无法捕获病毒并上传,如何防止它感染其他文件?就像上传区域可以沙箱化或者总是一样,并使用该文件路径供用户访问内容,以便它不会传播到系统的其他部分?
答案 0 :(得分: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
答案 1 :(得分:1)
我知道这个主题已经活了三年了,但是,如果将来其他任何人都在寻找基于PHP的反病毒解决方案,那么对于那些没有反病毒的人来说守护程序,程序或实用程序安装在其主机上,无法安装防病毒守护程序,程序或实用程序, phpMussel ,我编写的PHP脚本在ClamAV上,Rohit(原始海报)正在寻找(基于PHP的反病毒来保护他们的CMS免受恶意文件上传),这可能是一个可行的解决方案。它当然不是完美的,我不能保证它能抓住一切,但到目前为止,它肯定比完全没有任何东西更好。
理想情况下,按照Matt上面的建议,调用shell让ClamScan扫描文件上传绝对是一个理想的解决方案,如果这是主持人,网站管理员或Rohit情况下的任何人能够做到,我完全赞同这个建议。我所写的,因为它是一个PHP脚本,具有任何完全依赖于PHP的功能所固有的局限性,但是,在上述建议和/或类似建议不可能的情况下(例如,如果主机没有安装防病毒软件并禁用shell访问;与更便宜的共享托管解决方案相同),我在这里提出的建议可能会介入 - 只需要安装PHP的东西(包括PCRE扩展,无论如何都是PHP的标准配置),仅此而已。
另外请记住,正如Matt已经建议的那样,要始终在根目录之外上传,以确保攻击者无法利用上传的文件(例如,如果攻击者试图通过以下方式攻击您的系统上传后门程序或特洛伊木马程序) - 病毒并不是您需要担心的唯一威胁,而且现在绝大多数的防病毒解决方案并不仅仅关注病毒。 Matt也完全正确地指出没有任何防病毒解决方案是完美的,因此,任何允许文件上传到他们的网站或服务器的人都需要保持警惕 - 防病毒解决方案是任何人都必须拥有的但是,没有互联网安全的圣杯可以涵盖所有可能存在的威胁。此外,重命名文件并不仅仅是为了确保它们无法执行(可能是原始海报的有关EXE的回复评论可能有所推断) - 目录遍历攻击等威胁的风险可以通过重命名文件以及与试图覆盖目标系统上现有文件的攻击者相关的风险来减少,以隐藏他们的脏工作。
关于可能被反病毒解决方案恶意攻击的文件的威胁,然后可能会感染上传到的系统;主机管理员或网站管理员在这种情况下可能做的事情是使用某种快速简单的编码过程,该过程使系统本身不可执行文件,但负责的PHP脚本可以轻松容易地反转用于根据请求调用该文件,例如通过使用base64_encode(),bin2hex(),或者甚至通过旋转几个字符并添加一个盐来替换文件的幻数或类似的东西。