共计 4014 个字符,预计需要花费 11 分钟才能阅读完成。
本文介绍了在 Java 中如何扫描和验证图像上传的过程。直接的图像上传过程为客户端用户和网站底层文件存储实例之间创建了一个高效的路径,从而显著提高了客户端 / 网络服务关系的两端效益。然而,图像文件作为客户端威胁行为者容易利用的目标,导致文件上传安全成为一个非常严重的问题。本文探讨了恶意代码隐藏在图像文件中的方法以及对图像上传进行验证的重要性,以确保网站和用户的安全。
直接图像上传过程在客户端用户和网站的底层文件存储实例之间创建了一条高效的路径,从而使客户端 /Web 服务关系的两端都受益匪浅。主要由于独立开发人员项目和小型企业的云存储资源的可用性(和可承受性)不断增加,我们在网上看到的任何地方都可以越来越频繁地上传自己的图像文件,随着稳定的需求而增长新形式的社会参与和商业。
然而,问题在于文件上传安全是一个非常严重的问题 – 并且图像文件很容易被客户端威胁行为者利用。当然,图像文件在这方面并不是独一无二的(例如,许多常见的文件格式,包括 PDF、DOCX 等,都可以容纳各种隐藏的威胁),但它们在互联网(主要是视觉平台)上具有巨大的价值。使它们成为恶意内容更方便的容器之一。
攻击者可以使用精心设计的隐写技术轻松地将恶意软件和其他恶意代码直接注入图像文件,从而可靠地避免因配置不当的上传安全策略而被检测到。恶意软件可以通过多种不同的方式隐藏在图像文件中 – 直接附加到文件末尾,通过微小的代码更改巧妙地合并,甚至隐藏在图像的元数据或 EXIF 数据中。恶意代码通常设计为远程执行或在文件打开时执行,这意味着存储中处于休眠状态、未被检测到的威胁可能要等待数天、数周甚至数月才能突然释放危险内容。他们还可以利用的不仅仅是网站的系统:如果毫无戒心的客户端用户下载受感染的文件,他们的设备可能会很快受到损害,严重(可能是永久性)损害网站的声誉。
减轻图像文件上传威胁首先要实施强大的病毒和恶意软件检测策略,还包括采取合理的文件上传验证措施。例如,异常大的图像文件可能表明隐藏的威胁,因此了解(并可能标准化)图像上传的大小有助于加快威胁检测。此外,限制允许上传的不同文件扩展名的数量(例如,限制为 PNG 或 JPG)可以使文件扩展名验证更容易、更高效地进行。文件扩展名和标头也不应该被盲目信任 – 彻底的内容验证应始终考虑文件结构和文件编码。
示范
在本文的其余部分中,我将演示两个简单、免费使用的解决方案,它们可以帮助在到达云存储之前进行病毒扫描和验证图像文件上传。可以使用互补 的、可立即运行的 Java代码示例来有效地利用两者 来构建 API 调用。这些 API 分别完成以下功能:
-
扫描图像文件是否有病毒
-
验证图像文件
两种 API 相互结合使用,可以帮助确保图像上传有效且不含病毒和恶意软件,从而显着降低与直接图像文件上传相关的风险。
扫描图像文件是否存在病毒
该 API 配备了超过 1700 万个病毒和恶意软件签名,涵盖了木马、勒索软件和间谍软件等极其常见的威胁。它也不限于图像文件(您还可以扫描 PDF、DOCX、XLSX 等文档),因此如果您的文件上传过程接受多种文件类型,它可以提供一些多功能性。所有扫描的文件最终都会收到“CleanResult:True”或“CleanResult:False”布尔响应;如果为 false,则检测到的病毒的名称将在 API 响应中提供。
要安装客户端 SDK,首先在 Maven POM 文件中添加对存储库的引用。Jitpack 用于动态编译库:
jitpack.io
https://jitpack.io
之后,添加对依赖项的引用:
com.github.Cloudmersive
Cloudmersive.APIClient.Java
v4.25
安装完成后,您可以使用以下补充代码示例构建 API 调用:
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.ScanApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 配置 API 密钥授权:Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// 取消注释以下行以设置 API 密钥的前缀,例如“令牌”(默认为空)//Apikey.setApiKeyPrefix("Token");
ScanApi apiInstance = new ScanApi();
File inputFile = new File("/path/to/inputfile"); // 文件 | 要执行操作的输入文件。try {VirusScanResult result = apiInstance.scanFile(inputFile);
System.out.println(result);
} catch (ApiException e) {System.err.println("调用 ScanApi#scanFile 时出现异常");
e.printStackTrace();}
测试此解决方案时,我建议彻底研究惰性文件的选项,这些选项可以安全地触发“CleanResult:False”响应(例如,Eicar 文件通常是这方面的流行选择)。
验证图像文件
该 API 旨在严格验证数十种常见输入图像类型,包括 JPG、PNG、WEBP、GIF 等。它将识别图像上传中包含的内容是否与其扩展名匹配,文件是否受密码保护,以及文件中是否存在任何错误和警告。如果检测到任何错误,API 响应将提供错误描述、错误路径以及供参考的 URI。
您可以像以前一样安装此客户端 SDK。将此引用添加到您的 Maven POM 文件存储库:
jitpack.io
https://jitpack.io
然后添加对依赖项的引用:
com.github.Cloudmersive
Cloudmersive.APIClient.Java
v4.25
最后,您可以使用下面准备运行的代码示例构建您的 API 调用:文章来源:https://www.toymoban.com/diary/java/419.html
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.ValidateDocumentApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 配置 API 密钥授权:Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// 取消注释以下行以设置 API 密钥的前缀,例如“令牌”(默认为空)//Apikey.setApiKeyPrefix("Token");
ValidateDocumentApi apiInstance = new ValidateDocumentApi();
File inputFile = new File("/path/to/inputfile"); // 文件 | 要执行操作的输入文件。try {DocumentValidationResult result = apiInstance.validateDocumentImageValidation(inputFile);
System.out.println(result);
} catch (ApiException e) {System.err.println("调用 ValidateDocumentApi#validateDocumentImageValidation 时出现异常");
e.printStackTrace();}
文章来源地址 https://www.toymoban.com/diary/java/419.html
到此这篇关于 Java 中如何扫描和验证图像上传的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!
原文地址:https://www.toymoban.com/diary/java/419.html
如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!