Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally

本文总结了Fortify检测到的两种漏洞:PortabilityFlaw:FileSeparator(文件分隔符漏洞),由于不同操作系统间文件路径分隔符不同而导致的便携性问题;PoorErrorHandling:ReturnInsideFinally(错误处理不当),在finally块内返回导致异常丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和  Poor Error Handling: Return Inside Finally 漏洞进行总结,如下:

1、Portability Flaw: File Separator(文件分隔符)

1.1、产生原因:

  不同的操作系统使用不同的字符作为文件分隔符。例如,Microsoft Windows 系统使用“\”,而 UNIX 系统则使用“/”。应用程序需要在不同的平台上运行时,使用硬编码文件分隔符会导致应用程序逻辑执行错误,并有可能导致 denial of service(拒绝服务)。

 

例 1:以下代码使用硬编码文件分隔符来打开文件:
...
File file = new File(directoryName + "\\" + fileName);

 

1.2、修复方案:

  为编写可移植代码,不应使用硬编码文件分隔符,而应使用语言库提供的独立于平台的 API。

例 2下列代码执行与例 1 相同的功能,但使用独立于平台的 API 来指定文件分隔符:
...
File file = new File(directoryName + File.separator + fileName);
...    

 

 

2、Poor Error Handling: Return Inside Finally

2.1、产生原因:

  finally 块中的返回指令会导致从 try 块中抛出的异常丢失。

 

例 1在下列代码中,调用 doMagic 方法,会导致抛出 Exception 异常,但该异常将不会传递给调用者,因为finally 块中的返回指令会导致异常的丢弃。

 

public static void doMagic() throws Exception {

  try {

    throw new Exception(“Something error!”);  //1.抛出异常

  }catch(Exception e){         //2.捕获异常匹配,进入控制块

           throw e;

  }finally {                                //3.throw前控制转移到finally块,执行完后再返回

    return true;               //4.控制转移,直接return,不再返回catch块,吃掉了异常

  }

}

 

2.2、修复方案:

  将返回指令移到 finally 块之外。如果必须要finally 块返回一个值,可以简单地将该返回值赋给一个本地变量,然后在 finally 块执行完毕后返回该变量。
  1、不要在finally里面写return语句

 

转载于:https://www.cnblogs.com/meInfo/p/9047876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值