extrameile / em-antivirus
用于对上传文件进行病毒检查的TYPO3扩展,如使用clamav或eset等工具
Requires
- typo3/cms-core: ^8.7.0 || ^9.5.0 || ^10.4.0
README
此扩展会检查所有添加或替换到TYPO3后端的文件,使用Antivirus服务如ClamAV或ESET。可以通过提供实现ScanServiceInterface的扫描服务来添加其他Antivirus系统。在开发环境中,可能没有安装兼容的扫描器,因此存在一个名为"DevelopmentAvService"的扫描服务,它仅在上传的文件内容中包含"virus"单词时进行扫描。
将执行所有可用的扫描器,如果没有可用的扫描器,将抛出异常,并且不会接受任何文件。这样也可以为内容检查添加多个上传过滤器。
它是否适用于所有上传文件?
不适用,此扩展连接到FAL上传事件并处理文件。TYPO3核心后端使用FAL,但如果你在TCA中使用非FAL文件字段,则不会运行。你需要实现检查并自行调用服务。此外,如果前端表单不使用FAL上传过程(EXT:form使用,Powermail不使用),则默认情况下不会处理。如果你不使用FAL,你需要自行调用服务,例如通过调用提供的实用程序类。
\Extrameile\EmAntivirus\Utility\AntivirusUtility::scanFile($sourceFilePath, true);
第一个参数是要扫描的文件的完整路径和文件名,第二个参数定义是否生成FlashMessages。可能抛出两种异常。
\Extrameile\EmAntivirus\Exception\NoScannerFoundException 如果找不到可执行的扫描器。 \Extrameile\EmAntivirus\Exception\VirusDetectedException 如果扫描器在给定的文件中发现了病毒。
如何配置ClamAV
在标准系统中,如果clamav安装在一个可搜索的路径之一,则不需要配置。如果二进制文件不在搜索路径中或设置了open_basedir限制,则无法找到可执行文件。你需要在本地配置中配置路径。只有在没有设置open_basedir限制的情况下,TYPO3报告模块中的检测才能正常工作。
如何配置ESET
根据使用的ESET版本,可执行文件名可能不同。在旧版本中,它被称为"eset_scan",在新版本中使用"cls"。两者使用相同的参数并具有相同的返回代码。如果搜索路径中存在并且没有设置open_basedir限制,则自动找到eset_scan二进制文件。否则,你需要在本地配置中添加它们。
如何使用TYPO3_CONF_VARS配置可执行文件
如果TYPO3无法找到你的可执行文件,因为它们不在搜索路径中或设置了open_basedir限制,你可以在本地配置(或附加配置)中配置可执行文件的正确位置。
请注意,如果你使用binSetup配置,则TYPO3报告模块将显示绿色的"antivirus可用",无论可执行文件是否存在。
以下配置允许你添加更多二进制搜索路径以搜索可执行文件
附加binPath
$GLOBALS['TYPO3_CONF_VARS']['SYS']['binPath'] = '/opt/eset/esets/sbin/';
clamscan路径
或者你需要提供可执行文件的完整路径和文件名。以下为ClamAV的示例
$GLOBALS['TYPO3_CONF_VARS']['SYS']['binSetup'] = 'clamscan=/usr/bin/clamscan';
eset_scan路径
以下为ESET FileSecurity与eset_scan的示例
$GLOBALS['TYPO3_CONF_VARS']['SYS']['binSetup'] = 'esets_scan=/opt/eset/esets/sbin/esets_scan';
cls路径
以下为ESET FileSecurity与cls的示例
$GLOBALS['TYPO3_CONF_VARS']['SYS']['binSetup'] = 'esets_scan=/opt/eset/efs/sbin/cls/cls';
如何测试功能
完成设置后,上传一个EICAR测试文件,扫描仪应该会启动。请注意,您可能需要禁用本地的病毒扫描器来下载文件!文件可以在这里找到 https://www.eicar.org/?page_id=3950 文件上传完毕后将被立即拦截,将显示错误信息,并且不会移动到您选择的上传文件夹。