Fortifyはコードスキャン:Parivacy違反:ヒープ検査の脆弱性ソリューション

状況によって引き起こされる脆弱性:

確実にメモリ操作システムStringオブジェクトからデータを削除することができない機密データを保管してください。

その後、メモリに保存されます(など、パスワード、社会保障番号、クレジットカード番号など)の機密データの使用後にメモリをクリアしていない場合、これらのデータは、漏れることがあります。一般的に、String それがあるため、しかし、機密データを格納するために使用されている  String オブジェクトが変更されず、ユーザはメモリから削除するJVMのガベージコレクタを使用することができる  String 値。不十分なJVMのメモリがない限り、それ以外のシステムは、ガベージコレクタの実行は保証されませんので、とき、ガベージコレクタを実行する必要はありません。アプリケーションがクラッシュが発生した場合は、メモリダンプ操作のアプリケーションは、機密データの漏洩を引き起こす可能性があります。

char配列は、一般的に文字列記憶されている機密データの代わりに使用されています。

(ストアするか否かをメディアコンバータとして使用される)などの長い文字列オブジェクトが使用されるように、データを格納する過程で、脆弱性が発生する可能性があります。

ボーは、メイン遭遇した状況です。

最初の(文字列方法に] [文字を入れる配列を直接使用するか、新しい文字列の脆弱性を有していてもよいです)。

char[] decryptChars = DecryptString(splits[1]);//splits是一个String[]
resultValue = String.valueOf(decryptChars);//该行引发漏洞,返回值resultValue是字符串
//resultValue = new String(decryptChars);//同上,该方法同样引发漏洞
Arrays.fill(decryptChars,' ');
if (resultValue == null) {
     throw new Exception("解密字符串失败!");
}
    

更新:

char[] decryptChars = DecryptString(splits[1]);
StringBuffer sb = new StringBuffer();
for (int i = 0;i < decryptChars.length;i++){
    sb.append(decryptChars[i]);
}
Arrays.fill(decryptChars,' ');
if (sb.length()==0){
    throw new Exception("解密字符串失败!");
}

第(1バイトは[] [チャーに変換されます)。

byte[] bytes = HexToByte(sEncrypted);//sEncrypted是一个字符串
byte[] deBytes = DecryptStream(bytes);//加密
sDecryptChar = new String(deBytes,"ISO-8859-1");//引发漏洞,sDecryptChar是一个char[]

更新:

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;

byte[] bytes = HexToByte(sEncrypted);
byte[] deBytes = DecryptStream(bytes);
Charset cs = Charset.forName("ISO-8859-1");
ByteBuffer bb = ByteBuffer.allocate(deBytes.length);
bb.put(bytes).flip();
CharBuffer cb = cs.decode(bb);
sDecryptChar = cb.array();

 

公開された95元の記事 ウォン称賛43 ビュー70000 +

おすすめ

転載: blog.csdn.net/lyxuefeng/article/details/103862926