Laravel Packages

ClamAV Scanner for Flysystem

Published
ClamAV Scanner for Flysystem image

ClamAV Scanner for Flysystem is a package by Michael Griego that scans files for malware using the ClamAV antivirus engine. The readme explains in more detail how this adapter works in tandem with a “backing” adapter:

This package provides a filesystem adapter for Flysystem that scans files being read from and written to an underlying filesystem using the popular ClamAV antivirus engine. This adapter acts as a passthrough adapter, sitting in between your application and whichever concrete Flysystem adapter you use to store your files. Since this scanner is itself a Flysystem adapter, it can be implemented in an existing application simply by dropping it in as a replacement to your existing Flysystem adapter so that all filesytem calls go through the ClamAV adapter.

Here’s a gist of the setup, which requires a few things: the backing adapter (i.e., local), the Quahog ClamAV integration library, and the ClamAvScannerAdapter from this package:

use League\Flysystem\Adapter\Local;
use Socket\Raw\Factory as SocketFactory;
use Xenolope\Quahog\Client as ClamAVScanner;
use League\Flysystem\Filesystem;
use mgriego\Flysystem\ClamAV\ClamAvScannerAdapter;
 
 
$backingAdapter = new Local(__DIR__.'/path/to/root');
 
 
// 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);
 
 
// In this case, copies will be scanned.
$adapter = new ClamAvScannerAdapter($quahog, $backingAdapter, true);
$filesystem = new Filesystem($adapter)

During usage, files are scanned during the following operations:

  • read / readStream
  • write / writeStream
  • update / updateStream
  • copy if the adapter is configured as such

If ClamAV detects malware in the file during any of those operations, the ClamAvScannerAdapter will throw a VirusFoundException exception. The getReason() method will give you the name of the malware detected and getPath() will provide the path of the file in question.

I would recommend going through the readme, which details the background of how to use this adapter as well as properly using the clamd daemon. To learn more about this package, get full installation instructions, and view the source code on GitHub at mgriego/flysystem-clamav.

Related: ClamAV Anti-Virus Validator for Laravel

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article
Screenshot: Capture Images and PDFs with PHP and Laravel image

Screenshot: Capture Images and PDFs with PHP and Laravel

Read article
Reset Sticky Database Connections Between Laravel Queue Jobs image

Reset Sticky Database Connections Between Laravel Queue Jobs

Read article