mgriego/flysystem-clamav

Flysystem ClamAV 扫描器充当一个透传文件系统,扫描从后端 Flysystem 适配器(例如本地、FTP、S3 等)检索或存储的文件。

v1.0 2017-08-13 03:04 UTC

This package is not auto-updated.

Last update: 2024-09-15 04:05:32 UTC


README

Build Status

此软件包为Flysystem提供了一个文件系统适配器,它使用流行的ClamAV杀毒引擎扫描从底层文件系统读取和写入的文件。此适配器充当透传适配器,位于您的应用程序和存储文件的任何具体 Flysystem 适配器之间。由于此扫描器本身是 Flysystem 适配器,因此可以通过将其作为现有 Flysystem 适配器的替代品轻松地将其添加到现有应用程序中,以便所有文件系统调用都通过 ClamAV 适配器进行。在实例化它时,只需将现有适配器作为“后端”适配器传递给 ClamAV 适配器,其余部分对您的应用程序应该是完全透明的。

需求

  • ClamAV - 为了使用此软件包,您需要访问运行中的 ClamAV clamd 守护进程实例。此软件包利用 clamd 的速度。其他类似文件扫描软件包使用 clamscan,它需要在每次调用时读取和解析大型病毒数据库。另一方面,clamd 守护进程只需要在启动时和数据库刷新时读取和解析数据库,使其成为一个更快的选择。如果您正在使用Docker,则可以通过利用Docker Hub上的现有映像(例如infiniteproject/clamav映像)来轻松地将 clamd 启动并运行。请确保您使用的映像提供了一个正在运行的 clamd 守护进程。仅运行 clamscan 的映像将无法与此适配器一起使用。
  • Flysystem - 此软件包是一个 Flysystem 文件系统适配器,因此不言而喻,您必须在项目中直接或通过现有集成(例如Laravel)使用 Flysystem。为了使用此适配器,您还必须使用一个具体的适配器,该适配器从真实文件系统存储和检索文件。您将需要设置“后端”适配器并将该适配器传递给 ClamAV 适配器(除非您正在使用提供该功能的功能性现有集成)。

安装

通过 composer

composer require mgriego/flysystem-clamav

用法

为了使用此适配器,您必须首先设置您的“后端”适配器和指向您的 clamd 服务器的 Quahog 实例。

首先,像通常一样设置您的后端适配器。例如,如果您正在使用 Local 适配器存储文件

use League\Flysystem\Adapter\Local;

$backingAdapter = new Local(__DIR__.'/path/to/root');

接下来,您必须设置Quahog ClamAV集成库的实例。当使用此包时,Quahog将由Composer自动安装,因此无需显式地引入它。有关如何设置Quahog实例的更多信息,请参阅Quahog README。如果您的clamd服务通过本地计算机的回环适配器上的TCP端口3310运行,您可以这样实例化Quahog

use Socket\Raw\Factory as SocketFactory;
use Xenolope\Quahog\Client as ClamAVScanner;

// Create a new socket instance
$socket = (new SocketFactory())->createClient('tcp://127.0.0.1:3310');

// Create a new instance of the Client
$quahog = new ClamAVScanner($socket);

一旦您设置了后端适配器和扫描器,您就可以实例化此适配器。此适配器的构造函数需要两个必需参数和一个可选参数

  1. Quahog实例
  2. 后端适配器实例
  3. 一个布尔值,告诉适配器是否使用copy操作扫描正在复制的文件。此参数是可选的,默认为false。如果设置为true,适配器将首先扫描源文件,然后告诉后端适配器执行复制。
use League\Flysystem\Filesystem;
use mgriego\Flysystem\ClamAV\ClamAvScannerAdapter;

// In this case, copies will be scanned.
$adapter = new ClamAvScannerAdapter($quahog, $backingAdapter, true);
$filesystem = new Filesystem($adapter);

read/readStreamwrite/writeStreamupdate/updateStream操作期间扫描文件。如果适配器被配置为这样,文件在copy操作期间也会被扫描。如果ClamAV在文件中检测到恶意软件,将抛出\mgriego\Flysystem\ClamAV\VirusFoundException异常。调用getReason方法将返回在文件中检测到的恶意软件的名称,调用getPath方法将返回正在操作的文件路径。或者,您也可以简单地调用所有异常上可用的标准getMessage方法,并返回包含路径和恶意软件名称的消息。

相关包

即将推出!

致谢

如果没有这些优秀项目,这个包将无法实现