mgriego / flysystem-clamav
Flysystem ClamAV 扫描器充当一个透传文件系统,扫描从后端 Flysystem 适配器(例如本地、FTP、S3 等)检索或存储的文件。
Requires
- php: >=5.6.0
- league/flysystem: ^1.0
- xenolope/quahog: ^2.1
Requires (Dev)
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-15 04:05:32 UTC
README
此软件包为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);
一旦您设置了后端适配器和扫描器,您就可以实例化此适配器。此适配器的构造函数需要两个必需参数和一个可选参数
- Quahog实例
- 后端适配器实例
- 一个布尔值,告诉适配器是否使用
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
/readStream
、write
/writeStream
和update
/updateStream
操作期间扫描文件。如果适配器被配置为这样,文件在copy
操作期间也会被扫描。如果ClamAV在文件中检测到恶意软件,将抛出\mgriego\Flysystem\ClamAV\VirusFoundException
异常。调用getReason
方法将返回在文件中检测到的恶意软件的名称,调用getPath
方法将返回正在操作的文件路径。或者,您也可以简单地调用所有异常上可用的标准getMessage
方法,并返回包含路径和恶意软件名称的消息。
相关包
即将推出!
致谢
如果没有这些优秀项目,这个包将无法实现