CS.UFR

解放されたリソースの使用

C# にはガベージコレクターがあるため、多くのメモリの指摘からほとんど保護されます。ただし、管理されていないリソースを使用するオブジェクト (たとえば、'IDisposable' オブジェクト) では、解放後の使用のバグが発生しやすい可能性がまだあります。CS.UFR チェッカーは、破棄されたリソースの使用にフラグを立てます。

脆弱性とリスク

破棄された後に 'IDisposable' オブジェクトにアクセスすると、例外がスローされるため、処理されない場合は、プログラムが途中で終了する可能性があります。

脆弱コード例

コピー
   using System.IO;
    
   namespace Example
   {
       class Program
       {
           static void Main(string[] args)
           {
               BinaryWriter bw = new BinaryWriter(new FileStream("aaa.txt", FileMode.Open)); // Or, any other IDisposable
              bw.Dispose();
   
              bw.Write("bbb"); //@ CS.UFR.廃棄された後にリソースにアクセスしています。
          }
   
      }
  }

この例で Klocwork は、コードが破棄された後にリソースにアクセスする際に 12 行目で CS.UFR の欠陥を報告します。

修正コード例

コピー
   using System.IO;
    
   namespace Example
   {
       class Program
       {
           static void Main(string[] args)
           {
               BinaryWriter bw = new BinaryWriter(new FileStream("aaa.txt", FileMode.Open)); // Or, any other IDisposable
              bw.Write("bbb"); //@no CS.UFR.
              bw.Dispose();
          }
   
      }
  }

外部参考資料

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。