首页 文章

病毒扫描从Azure Web / Worker角色上载的文件

提问于
浏览
3

我们正在设计一个Azure网站,允许用户上传可以访问的内容(MP4,Docx ... MSOffice文件) .

我们将对一些视频内容进行编码,以便在流式传输之前提供多种不同的质量格式(使用Azure Media Services) .

我们需要添加一个中间步骤,以便我们扫描上传的文件以查找潜在的病毒风险 . 是否有内置于azure(或第三方)的功能,允许我们在处理之前调用API来扫描内容?我们理想地寻找API而不仅仅是VM上的后台服务,因此我们可以获得可能用于Web或辅助角色的反馈 .

快速浏览一下Symantec Endpoint和Windows Defender,但不确定这些是否提供了API

3 回答

  • 0

    ClamAV是一个好主意,特别是现在0.99即将发布YARA规则支持 - 它将使你很容易编写自定义规则并允许clamav在今天开放使用大量优秀的YARA规则 .

    另一条路线,以及一些无耻的插件,是检查scanii.com,它是用于恶意软件/病毒检测的SaaS,它与AWS和Azures的整合非常好 .

  • 0

    我使用开源ClamAV成功完成了这项工作 . 你没有指定你正在使用的语言,但因为它是Azure我会假设.Net .

    有一个.Net包装器应该提供您正在寻找的API:

    https://github.com/tekmaven/nClam

    这是一些示例代码( note: 这是直接从nClam GitHub仓库复制并在此复制,以防止链接腐烂)

    using System;
    using System.Linq;
    using nClam;
    
    class Program
    {
        static void Main(string[] args)
        {
    
            var clam = new ClamClient("localhost", 3310);
            var scanResult = clam.ScanFileOnServer("C:\\test.txt");  //any file you would like!
    
            switch(scanResult.Result)
            {
                case ClamScanResults.Clean:
                    Console.WriteLine("The file is clean!");
                    break;
                case ClamScanResults.VirusDetected:
                    Console.WriteLine("Virus Found!");
                    Console.WriteLine("Virus name: {0}", scanResult.InfectedFiles.First().VirusName);
                    break;
                case ClamScanResults.Error:
                    Console.WriteLine("Woah an error occured! Error: {0}", scanResult.RawResult);
                    break;
            }
        }
    }
    

    还有可用于刷新病毒定义数据库的API . 所有必需的ClamAV文件都可以包含在部署包中,任何配置都可以放入服务启动代码中 .

  • 1

    有很多选择可以实现这一目标:

    首先,您可以使用已经提到的ClamAV . ClamAV并不总能获得其病毒数据库的最佳报道,但正如其他人指出的那样,它易于使用且可扩展 .

    您还可以安装商业扫描仪,例如avg,kaspersky等 . 其中许多都带有可以直接与之通信的C API,但从许可的角度来看,通常可以获得访问权限 .

    或者,您可以使用以下内容直接调用可执行文件来捕获输出:

    var proc = new Process {
        StartInfo = new ProcessStartInfo {
            FileName = "scanner.exe",
            Arguments = "arguments needed",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    };
    proc.Start();
    while (!proc.StandardOutput.EndOfStream) {
        string line = proc.StandardOutput.ReadLine();
    }
    

    然后,您需要解析输出以获取结果并在应用程序中使用它 .

    最后,现在有一些商业API可用于执行此类操作,例如attachmentscanner(免责声明我与此产品相关)或scanii . 这些将为您提供API和更具伸缩性的选项,以扫描特定文件并从至少一个病毒检查引擎接收响应 .

相关问题