Sim, pode ser uma vulnerabilidade de segurança.
Colocar .:
na frente de CLASSPATH
significa que Java usa classes no diretório atual antes de se preocupar em procurar o restante dos CLASSPATH
caminhos. Isso significa que .class
arquivos no diretório atual ou em seus subdiretórios serão usados no lugar de qualquer classe ou interface. Por exemplo, se o arquivo ./java/lang/String.class
existir, ele será usado em vez da classe String
padrão.
Isso significa que, se você não estiver prestando atenção no que é o diretório atual ao executar um programa Java, o programa pode carregar classes maliciosas no lugar de qualquer classe.
Para economizar o esforço de verificar o diretório atual toda vez que você executar um programa Java, você não deve configurar o sistema para fazer isso por padrão.
Se você for usar classes no diretório atual ao executar um determinado programa Java, geralmente deverá ignorar a configuração CLASSPATH
e usar o argumento -cp
como java
, como em:
java -cp ".:…" …
Isso evita completamente que outros programas Java sejam afetados por meio da variável de ambiente CLASSPATH
. Você deve fazer isso apenas nos casos em que souber que os arquivos no diretório atual não são mal-intencionados.