Java开发安全之:Unreleased Resource: Streams需确保流得到释放

这篇具有很好参考价值的文章主要介绍了Java开发安全之:Unreleased Resource: Streams需确保流得到释放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Overview

 java 中的函数 getResponseBytes() 有时无法成功释放由  getInputStream() 函数分配的系统资源。

Details

程序可能无法成功释放某一项系统资源。 在这种情况下,在某些程序路径上,所分配的资源未释放。 资源泄露至少有两种常见的原因:

- 错误状况及其他异常情况。

- 未明确程序的哪一部份负责释放资源。

大部分 Unreleased Resource 问题只会导致常规软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 Denial of Service 攻击。

示例:下面的方法绝不会关闭它所打开的文件句柄。FileInputStream 中的 finalize() 方法最终会调用 close(),但是不能确定何时会调用 finalize() 方法。在繁忙的环境中,这会导致 JVM 用尽它所有的文件句柄。

private void processFile(String fName) throws FileNotFoundException, IOException {
 FileInputStream fis = new FileInputStream(fName); 
int sz; 
byte[] byteArray = new byte[BLOCK_SIZE]; 
while ((sz = fis.read(byteArray)) != -1) {
 processBytes(byteArray, sz); 
} 
}

Recommendations

1. 请不要依赖 finalize() 回收资源。为了使对象的 finalize() 方法能被调用,垃圾收集器必须确认对象符合垃圾回收的条件。但是垃圾收集器只有在 JVM 内存过小时才会使用。因此,无法保证何时能够调用该对象的 finalize() 方法。垃圾收集器最终运行时,可能出现这样的情况,即在短时间内回收大量的资源,这种情况会导致“突发”性能,并降低总体系统通过量。随着系统负载的增加,这种影响会越来越明显。 最后,如果某一资源回收操作被挂起(例如该操作需要通过网络访问数据库),那么执行 finalize() 方法的线程也将被挂起。

2. 在 finally 代码段中释放资源。示例中的代码可按以下方式改写:

public void processFile(String fName) throws FileNotFoundException, IOException { 
FileInputStream fis; 
try { fis = new FileInputStream(fName); 
int sz; 
byte[] byteArray = new byte[BLOCK_SIZE]; 
while ((sz = fis.read(byteArray)) != -1) {
 processBytes(byteArray, sz); 
} 
} finally { 
if (fis != null) {
 safeClose(fis); 
} 
} 
} 

public static void safeClose(FileInputStream fis) {
 if (fis != null) {
 try { 
fis.close(); 
} catch (IOException e) {
 log(e); 
} 
} 
}

以上方案使用了一个助手函数,用以记录在尝试关闭流时可能发生的异常。该助手函数大约会在需要关闭流时重新使用。

此外,processFile 方法不会将 fis 对象初始化为 null,而是进行检查,以确保在调用 safeClose() 之前fis 不为 null。如果没有进行 null 检查,Java 编译器就会报告 fis 可能没有进行初始化。编译器做出这一判断源于 Java 可以检测未初始化的变量。如果用一种更加复杂的方法将 fis 初始化为 null,那么编译器就无法检测 fis 未经初始化便使用的情况。文章来源地址https://www.toymoban.com/news/detail-810967.html

到了这里,关于Java开发安全之:Unreleased Resource: Streams需确保流得到释放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

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

相关文章

  • 如何确保线程安全?

    如何确保线程安全? 在 Java 中可以有很多方法来保证线程安全——同步,使用原子类(atomic concurrent classes),实现并发锁,使用 volatile ,使用不变类和线程安 全类。 73、同步方法和同步块,哪个是更好的选择? 同步块是更好的选择,因为它不会锁住整个对象(当然你也

    2023年04月12日
    浏览(29)
  • Sqoop安全性:确保安全的数据传输

    确保数据传输的安全性在大数据处理中至关重要。Sqoop作为一个用于数据传输的工具,也提供了多种安全性措施,以确保数据在传输过程中的机密性和完整性。本文将深入探讨Sqoop的安全性特性,提供详细的示例代码和全面的内容,以帮助大家更好地了解和应用这些安全性措施

    2024年01月16日
    浏览(30)
  • 确保无缝、安全的云转型

    随着云计算继续主导数字化转型(这是理所当然的),组织面临着双重挑战:将运营无缝转移到云并确保这种转型的安全。 虽然云的采用保证了可扩展性、成本效率和生产力的提高,但保持警惕对于组织防范网络安全威胁和安全漏洞渗透到任何安全云转型中至关重要。   

    2024年02月10日
    浏览(23)
  • 确保端点安全的 7 大 REST API 安全策略

    在当今 REST API 驱动的环境中,大多数 API 都是基于 REST 的,并被 Web 应用程序广泛使用。这些 API 就像用于在线发送和接收信息的多功能工具。然而,它们的广泛使用使它们面临各种安全威胁和挑战。 无论客户端或其运行环境如何,可以采用哪些策略来保护 REST API 的完整性和

    2024年02月02日
    浏览(50)
  • RAID配置:确保数据安全性

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月07日
    浏览(34)
  • 机器人的安全与隐私保护:如何确保数据安全

    随着人工智能技术的不断发展,机器人在各个领域的应用也越来越广泛。然而,随着机器人的普及,数据安全和隐私保护问题也逐渐成为社会关注的焦点。在这篇文章中,我们将深入探讨机器人的安全与隐私保护问题,并提出一些实际操作的方法和技术手段,以确保机器人在

    2024年04月09日
    浏览(48)
  • 算法部署过程中如何确保数据的安全?

    在数字化时代,数据安全成为了企业和个人面临的一项主要挑战。随着技术的迅速发展,尤其在算法部署过程中,确保敏感数据的安全性变得更加复杂和关键。在这个背景下,软件加密和授权机制的作用显得尤为重要。软件加密不仅仅是转换数据为只有授权用户能解读的格式

    2024年01月18日
    浏览(40)
  • 数据治理:银行如何确保数据质量与安全

    在数字化时代,数据已经成为银行的重要资产,而数据治理则是确保数据质量、安全性和可用性的关键。那么,什么是银行数据治理?为什么我们需要银行数据治理?又如何进行有效的银行数据治理呢?又有哪些数据治理技术及其在银行领域的实际应用呢?本文将为您一一解

    2024年02月03日
    浏览(29)
  • 基于物理安全的数据库访问控制:确保数据安全性

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着大数据时代的到来,各类组织机构和企业纷纷开始关注数据安全和隐私保护。在数据处理和存储过程中,确保数据的物理安全和逻辑安全至关重要。数据库访问控制作为保障数据安全的一项基础工作,也应受到足够的重

    2024年02月12日
    浏览(42)
  • 输电线路定位监测:确保电力安全的重要手段

    随着社会经济的快速发展,电力需求不断增加,输电线路作为输送电力的重要通道,其安全稳定运行显得尤为重要。为了保障电力系统的安全稳定运行,恒峰智慧科技研发的输电线路定位监测技术应运而生。本文将介绍采用分布式行波测量技术,实现输电线路故障定位监测的

    2024年02月05日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包