Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: Byte Array to String Conversion
Abstract
A conversão de um array de bytes em uma
String
pode levar à perda de dados.Explanation
Quando os dados de um array de bytes são convertidos em uma
Exemplo 1: O código a seguir converte dados em uma String para criar um hash.
Isso funciona muito bem supondo que o tamanho do arquivo seja menor que
String
, não fica claro o que acontecerá com os dados que estiverem fora do conjunto de caracteres aplicável. Isso pode provocar perda de dados ou uma diminuição no nível de segurança quando dados binários são necessários para assegurar que medidas de segurança adequadas sejam seguidas.Exemplo 1: O código a seguir converte dados em uma String para criar um hash.
...
FileInputStream fis = new FileInputStream(myFile);
byte[] byteArr = byte[BUFSIZE];
...
int count = fis.read(byteArr);
...
String fileString = new String(byteArr);
String fileSHA256Hex = DigestUtils.sha256Hex(fileString);
// use fileSHA256Hex to validate file
...
Isso funciona muito bem supondo que o tamanho do arquivo seja menor que
BUFSIZE
, desde que as informações em myFile
sejam codificadas da mesma maneira que o conjunto de caracteres padrão. Porém, se uma codificação diferente estiver em uso, ou se o arquivo for binário, haverá perda de informações. Isso por sua vez fará com que o hash SHA resultante seja menos confiável e pode implicar que colisões podem ser provocadas com muito mais facilidade, especialmente se os dados fora do conjunto de caracteres padrão forem representados pelo mesmo valor, como um ponto de interrogação.References
desc.semantic.java.code_correctness_byte_array_to_string_conversion