Código Fortify escaneo: Violación Parivacy: Montón de inspección Soluciones para vulnerabilidades

La vulnerabilidad causada por la situación:

Almacenar datos sensibles no se pueden eliminar de forma fiable los datos del sistema de manipulación de memoria de cadena objeto.

Estos datos si no se borre la memoria después de que el uso de datos sensibles (como contraseñas, números de seguridad social, números de tarjetas de crédito, etc.), a continuación, almacenados en la memoria pueden tener fugas. En general, String se utiliza para almacenar los datos sensibles, sin embargo, ya que el  String objeto no se cambia, el usuario sólo puede utilizar el recolector de basura JVM para eliminar de la memoria  String de valor. A menos que no hay suficiente memoria JVM, de lo contrario el sistema no es necesario para ejecutar el recolector de basura, así que cuando no está garantizada las ejecuta el recolector de basura. Si se produce una aplicación se bloquea, la aplicación de una operación de volcado de memoria puede causar una fuga de datos sensibles.

matriz de caracteres se utiliza generalmente en lugar de los datos sensible almacenada de cadena.

En el proceso de almacenamiento de los datos, siempre y cuando el objeto String a utilizar (si almacenar o utilizar como un convertidor de medios de comunicación), se puede producir la vulnerabilidad.

Bo es las principales situaciones encontradas:

El primero (poner una matriz de caracteres [] en el método String String utilizado directamente o puede tener una nueva vulnerabilidad String):

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("解密字符串失败!");
}
    

modificado:

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("解密字符串失败!");
}

El segundo (el byte [] se convierte a char []):

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

modificado:

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();

 

Publicado 95 artículos originales · ganado elogios 43 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/lyxuefeng/article/details/103862926
Recomendado
Clasificación