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


  繼續對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語句

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM