Java中如何扫描和验证图像上传

本文介绍了在Java中如何扫描和验证图像上传的过程。直接的图像上传过程为客户端用户和网站底层文件存储实例之间创建了一个高效的路径,从而显著提高了客户端/网络服务关系的两端效益。然而,图像文件作为客户端威胁行为者容易利用的目标,导致文件上传安全成为一个非常严重的问题。本文探讨了恶意代码隐藏在图像文件中的方法以及对图像上传进行验证的重要性,以确保网站和用户的安全。

直接图像上传过程在客户端用户和网站的底层文件存储实例之间创建了一条高效的路径,从而使客户端/Web 服务关系的两端都受益匪浅。主要由于独立开发人员项目和小型企业的云存储资源的可用性(和可承受性)不断增加,我们在网上看到的任何地方都可以越来越频繁地上传自己的图像文件,随着稳定的需求而增长新形式的社会参与和商业。

然而,问题在于文件上传安全是一个非常严重的问题 - 并且图像文件很容易被客户端威胁行为者利用。当然,图像文件在这方面并不是独一无二的(例如,许多常见的文件格式,包括 PDF、DOCX 等,都可以容纳各种隐藏的威胁),但它们在互联网(主要是视觉平台)上具有巨大的价值。使它们成为恶意内容更方便的容器之一。  

攻击者可以使用精心设计的隐写技术轻松地将恶意软件和其他恶意代码直接注入图像文件,从而可靠地避免因配置不当的上传安全策略而被检测到。恶意软件可以通过多种不同的方式隐藏在图像文件中 - 直接附加到文件末尾,通过微小的代码更改巧妙地合并,甚至隐藏在图像的元数据或 EXIF 数据中。恶意代码通常设计为远程执行或在文件打开时执行,这意味着存储中处于休眠状态、未被检测到的威胁可能要等待数天、数周甚至数月才能突然释放危险内容。他们还可以利用的不仅仅是网站的系统:如果毫无戒心的客户端用户下载受感染的文件,他们的设备可能会很快受到损害,严重(可能是永久性)损害网站的声誉。

减轻图像文件上传威胁首先要实施强大的病毒和恶意软件检测策略,还包括采取合理的文件上传验证措施。例如,异常大的图像文件可能表明隐藏的威胁,因此了解(并可能标准化)图像上传的大小有助于加快威胁检测。此外,限制允许上传的不同文件扩展名的数量(例如,限制为 PNG 或 JPG)可以使文件扩展名验证更容易、更高效地进行。文件扩展名和标头也不应该被盲目信任 - 彻底的内容验证应始终考虑文件结构和文件编码。

示范

在本文的其余部分中,我将演示两个简单、免费使用的解决方案,它们可以帮助在到达云存储之前进行病毒扫描和验证图像文件上传。可以使用互补的、可立即运行的Java代码示例来有效地利用两者来构建 API 调用。这些API分别完成以下功能:

  1. 扫描图像文件是否有病毒

  2. 验证图像文件

两种 API 相互结合使用,可以帮助确保图像上传有效且不含病毒和恶意软件,从而显着降低与直接图像文件上传相关的风险。

扫描图像文件是否存在病毒

该API配备了超过1700万个病毒和恶意软件签名,涵盖了木马、勒索软件和间谍软件等极其常见的威胁。它也不限于图像文件(您还可以扫描 PDF、DOCX、XLSX 等文档),因此如果您的文件上传过程接受多种文件类型,它可以提供一些多功能性。所有扫描的文件最终都会收到“CleanResult:True”或“CleanResult:False”布尔响应;如果为 false,则检测到的病毒的名称将在 API 响应中提供。

要安装客户端 SDK,首先在 Maven POM 文件中添加对存储库的引用。Jitpack用于动态编译库:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

之后,添加对依赖项的引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

安装完成后,您可以使用以下补充代码示例构建 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 文件存储库:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

然后添加对依赖项的引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

最后,您可以使用下面准备运行的代码示例构建您的 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.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/article/419.html

到此这篇关于Java中如何扫描和验证图像上传的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/article/419.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java应用中文件上传安全性分析与安全实践

    Java应用中文件上传安全性分析与安全实践

    ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨  🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spring框架的MultipartFile 2. Apache Commons FileUpload 3. Apache Commons IO 三. 文件上传路径的安全设置

    2024年04月25日
    浏览(4)
  • 10-java实现对上传文件做安全性检查

    对外接口支持文件上传功能时,为避免有人恶意上传有毒或者篡改程序的脚本,需要对上传的文件添加安全性校验。 文件首先校验直观文件上传格式,校验文件后缀是否符合业务要求。以MultipartFile类为例 由于文件后缀可能涉及到篡改的情况出现,因此需要校验文件的魔数,

    2024年02月04日
    浏览(4)
  • 如何使用Flask-Login来实现用户身份验证和安全性?

    当你想要在你的Flask应用中实现用户身份验证和安全性时,Flask-Login这个扩展将会是你的最佳伙伴。它提供了一组简单而强大的工具来处理用户登录、注销和其他安全相关的操作。下面,我将以一个新手的角度,用尽可能轻松的语气来解释如何使用Flask-Login。 首先,你需要在你

    2024年02月15日
    浏览(7)
  • 多因素认证与身份验证:分析不同类型的多因素认证方法,介绍如何在访问控制中使用身份验证以增强安全性

    多因素认证与身份验证:分析不同类型的多因素认证方法,介绍如何在访问控制中使用身份验证以增强安全性

    随着数字化时代的到来,信息安全问题变得愈发重要。在网络世界中,用户的身份往往是保护敏感数据和系统免受未经授权访问的第一道防线。单一的密码已经不再足够,多因素认证(MFA)应运而生,成为提升身份验证安全性的重要工具之一。本文将深入探讨不同类型的多因

    2024年02月10日
    浏览(6)
  • 帝国cms后台启用SESSION验证增加安全性

    帝国目前在cms类开源php程序中算是比较安全的一款内容管理系统了,在安全方面帝国可以说是下了很大功夫,很多安全性方面的配置可能大家都没有注意到。 比如后台启用SESSION验证这个功能,默认它是不开启的,因为以前大家用的虚拟主机的居多而很多这种主机它是不劫持

    2024年02月04日
    浏览(6)
  • Elasticsearch(实践2)链接库产生TLS验证安全性报错

    问题:   File \\\"/home/server/miniconda3/envs/rag/lib/python3.8/site-packages/elastic_transport/_transport.py\\\", line 328, in perform_request     meta, raw_data = node.perform_request(   File \\\"/home/server/miniconda3/envs/rag/lib/python3.8/site-packages/elastic_transport/_node/_http_urllib3.py\\\", line 202, in perform_request     raise err from None elas

    2024年01月18日
    浏览(6)
  • TeamView: 为了进一步增强安全性,在发起连接之前,我们希望您先验证您的账户

    TeamViewPC端远程连接另外一台电脑 弹出窗口:为了进一步增强安全性,在发起连接之前,我们希望您先验证您的账户 电脑浏览器自动跳转到手机号验证页面,输入正确的手机号后,点击验证却一直提示 手机号无效、手机号未知等异常。 复制验证链接到手机 https://login.teamviewer.

    2024年02月14日
    浏览(18)
  • 区块链如何提高支付安全性

    信任,但要核实”(Trust, but verify)是前美国总统罗纳德·里根在上世纪80年代讨论美苏关系时使用的标志性口号。有趣的是,这一口号是他从俄罗斯谚语“doveryai,no proveryai”改编而来的。如今,大约35年过去了,这一口号已被重新设计成了区块链社区的一张名片。 这句话看上去

    2024年02月05日
    浏览(13)
  • 如何提高Linux系统安全性

    如何提高Linux系统安全性

    Linux 是一种开源操作系统,被世界各地的个人、企业和政府广泛使用。然而,与任何其他操作系统一样(甚至是更),Linux 也容易受到安全威胁,因此采取措施提高系统的安全性非常重要。 提高 Linux 系统安全性的最简单、最有效的方法之一就是定期更新。更新通常包含解决

    2024年01月18日
    浏览(9)
  • 如何保证API接口的安全性

    如何保证API接口的安全性

    API接口的安全性是非常重要的,以下是一些保证API接口安全性的措施: 用户认证、授权:接口的调用者必须提供有效的身份认证信息,包括用户名、密码、密钥等,以保证接口的调用者的身份有效性。同时,需要在接口的访问权限上进行严格控制,以确保只有经过授权的用户

    2024年02月11日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包