【问题标题】:Connect file scan protection to my site将文件扫描保护连接到我的站点
【发布时间】:2016-06-05 06:56:56
【问题描述】:

我正在考虑在我正在创建的允许用户上传文件的 Web 应用程序中实施病毒扫描程序。所有后台功能都已完成,但我担心恶意用户可能会上传病毒而其他用户下载该文件。

几个月来,我一直在研究如何在我的 Web 应用程序中实施扫描仪。

我找到了各种在线病毒扫描程序,例如 MetaScan-Online 和 VirusTotal。

我已经阅读了他们提供的文档,但是我仍然感到困惑并且不确定是否可以使用 API 将这些应用程序实现到我的应用程序中。

可以吗?

如果是这样,是否有另一个病毒扫描程序可以同时扫描整个文件夹的文件?

【问题讨论】:

    标签: php html security web


    【解决方案1】:

    如果你的反病毒能力很强,那么你可能可以实现一个服务类并将传入的文件上传到公共扫描服务之一。 请记住,它们限制了可接受的文件大小和文件数量,并且它们不会永远存储扫描报告。

    元扫描

    这里描述了 Metascan 的公共 API:https://www.metascan-online.com/public-api#!/

    还有一个 PHP 检查器可用。但它使用了他们的 API v1 并且看起来已经过时了。也许联系他们以获取使用 API v2 的更新版本。 https://www.metascan-online.com/apps#!/php-metascan-online-checker

    病毒总数

    这里描述了公共 API:https://www.virustotal.com/de/documentation/public-api/

    有多个 PHP 库可用,仅提及其中之一 https://github.com/jayzeng/virustotal_apiwrapper

    上传后本地 clamAV 扫描

    另一种解决方案是在文件上传到您的服务器后使用clamscan 简单地触发clamav 扫描。这意味着上传到沙盒的 av-scan 文件夹,扫描、删除(如果不好)或保留(如果可以),最后移动到上传文件夹。这很慢,因为每次从 PHP 调用 clamscan 命令时都必须加载签名。

    对于沙盒文件夹,我的意思是用于更好地控制资源的受限系统环境,例如一个“上传目录”,具有受限或删除的读/写/执行权限(用户/组/其他),与应用程序隔离,无法从 Web 访问并且具有受限的 PHP 功能(想想 disable_functions 指令)。

    当您的服务器运行 clamav 守护程序 (clamd) 时,可以在文件夹上调用 clamdscan。这个解决方案很快,因为签名保存在内存中。

    【讨论】:

    • 感谢您的回复和详细的回答。我只是对一个方面有点困惑。沙箱文件夹是指子域吗?或者有没有在filezilla上创建沙盒文件夹的实际方法?
    • 对于沙箱文件夹,我的意思是一个受限制的系统环境,可以更好地控制资源,例如一个“上传目录”,具有受限或删除的读/写/执行权限(用户/组/其他),与应用程序隔离,无法从 Web 访问并且具有受限的 PHP 功能(想想 disable_functions 指令)。 -- Filezilla FTP 允许创建新文件夹并更改其权限。
    • 谢谢,我想我现在明白了。那么我要从 clamAvs 网站下载 clam scan 吗?然后将蛤扫描放入沙箱目录。然后在沙箱中创建文件夹(放置并保留)。当用户上传文件时,通过使用 PHP 将文件发送到沙箱,通过 PHP 触发扫描,然后将文件重定向到必要的文件夹(删除和/或保留)。将文件从沙盒文件夹发送到没有限制的文件夹(即不是沙盒)。
    • 是的,这是一种方法。要在 Debian 机器上安装 ClamAV,您可以在命令行上运行 sudo apt-get update + sudo apt-get install clamav。您可以在他们的网站上找到其他操作系统的安装说明:clamav.net/documents/installing-clamav
    • 运行 Debian linux 发行版的服务器。 debian.org/index.de.html(我假设您的服务器使用它.. 但我想我错了。所以,请按照您的操作系统的 ClamAV 安装说明进行操作。)
    【解决方案2】:

    您必须自己处理文件夹的发送,他们无法(作为外部服务)获取已定义文件夹的文件列表。

    VirusTotal 提供了一个公共 API 来扫描您的文件,这是一个好的开始。您可以实现多线程并存储每个文件的结果。这样您就可以避免多次发送同一个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 2016-02-12
      • 2013-03-15
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多