网站云查杀方案,搭建自己的云杀毒。
Jesai 人气:1最近公司的一个客户被勒索病毒攻击了,可悲的是,客户的文件附件太多而且大,没有做双击热备的功能。当客户发现病毒后,还第一时间格式化了服务器。那叫一个惨!!!!!初步分析导致中毒的原因课能有:
1.内网传播,同一个局域网存在病毒?但是其他的电脑服务器没听说有中毒的情况,估计可能性少点。
2.可能客户自己在服务器打开了某些文件导致中毒。这个就不清楚了,客户不想承担责任,就算有也不会承认的。
3.可能是网站的用户上传了病毒,或者病毒的压缩包。
不论如何,我们的系统给客户的印象还是不太好啊。
然后最近又开始做一个互联网的项目,其中有涉及到面向广大群众上传附件的功能。为了安全我们就开始想安全方案。备份当然最好有。杀毒服务成熟的也很多。比如某60啦,某毒霸啦······
然而,问题来了,客户不想出钱。
公司也不想出钱。那怎么办?
自己研发一个?我觉得可能性不大咯,这个东西,没有高端人才和雄厚的财力支撑,估计比较难研发。
聪明的你应该想到了。找开源方案。最开始我想的是,某60等本地的杀毒软件有没有接口可以调用呢,找了好久,发现用命令倒是可行的。命令确实在本地的文件才好查杀。不好控制啊。
而我想要的确实,用户上传的时候就扫描了,实时反馈文件的查杀结果。
接着继续找方案······
好不容易终于发现思科的一个开源的东西。ClamAV,传送门:https://www.clamav.net/
第一眼看到这个网站,就觉得逼格。然后在仔细研究了半天。就上路了。开始搭建自己的云查杀服务器。
文档什么的都有,就是英文的。而且更新也挺快的。最关键是开源的。
今天刚打完代码,代码开源在最后。具体使用文档和搭建服务器过程等我后续有空再写教程。
就看一波效果吧。有兴趣自己下代码研究。
服务器效果图:
代码项目结构:
运行效果:
没用病毒的文件:
[Fact] public async Task ScanBytes_InfectedData_ReturnsExpectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); const string sampleVirusSignature = @"1111111111111"; IClamAVScannerClient ClamAVScannerClient=ctx.Resolve<IClamAVScannerClient>(); var bytes = Encoding.UTF8.GetBytes(sampleVirusSignature); var result=await ClamAVScannerClient.SendAndScanFileAsync(bytes); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); Assert.NotEmpty(result.InfectedFiles); }
找了几个病毒测试包测试:
[Fact] public async Task ScanFileStream_InfectedData_ReturnsVirusDetectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); string filePath = @"C:\Users\deng\Desktop\b.zip"; IClamAVScannerClient ClamAVScannerClient = ctx.Resolve<IClamAVScannerClient>(); var result = await ClamAVScannerClient.SendAndScanFileAsync(FileToStream(filePath)); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); //Assert.NotEmpty(result.InfectedFiles); }
提供了WebApi,暂时还没完善,后续继续完善WebApi接口。
最终效果:
代码已经托管到gitee上面了:https://gitee.com/Jesai/JESAI.ClamAV.NetScanner.git
初步已经可以使用,我已经使用在项目。
目前只有netcore 3.1版本。
类库已经打包上传到Nuget。可以通过nuget管理器搜索 JESAI.ClamAV.NetScannerCore安装使用
或者直接命令 Install-Package JESAI.ClamAV.NetScannerCore
希望大家帮忙点下星星,写代码不容易。鼓励下写代码的动力。
后续等我有空,继续写一些怎么使用的教程和完善下文档。或者找我私下讨论一下。现在还没吃饭···········
加载全部内容