Ho una soluzione ai problemi di manipolazione del percorso di Fortify.
Ciò che si lamenta è che se si prendono dati da una fonte esterna, un utente malintenzionato può utilizzare tale fonte per manipolare il proprio percorso. In questo modo, l'utente malintenzionato può eliminare file o comunque compromettere il sistema.
Il rimedio suggerito a questo problema è usare una whitelist di directory attendibili come input validi; e, rifiuta tutto il resto.
Questa soluzione non è sempre praticabile in un ambiente di produzione. Quindi, suggerisco una soluzione alternativa. Analizza l'input per una whitelist di caratteri accettabili. Rifiuta dall'input, qualsiasi carattere che non vuoi nel percorso. Potrebbe essere rimosso o sostituito.
Di seguito è un esempio. Questo supera la recensione di Fortify. È importante ricordare qui per restituire il letterale e non il char che viene controllato. Fortify tiene traccia delle parti che provengono dall'input originale. Se utilizzi uno qualsiasi degli input originali, potresti comunque ricevere l'errore.
CleanPath della classe pubblica {
public static String cleanString(String aString) {
if (aString == null) return null;
String cleanString = "";
for (int i = 0; i < aString.length(); ++i) {
cleanString += cleanChar(aString.charAt(i));
}
return cleanString;
}
private static char cleanChar(char aChar) {
// 0 - 9
for (int i = 48; i < 58; ++i) {
if (aChar == i) return (char) i;
}
// 'A' - 'Z'
for (int i = 65; i < 91; ++i) {
if (aChar == i) return (char) i;
}
// 'a' - 'z'
for (int i = 97; i < 123; ++i) {
if (aChar == i) return (char) i;
}
// other valid characters
switch (aChar) {
case '/':
return '/';
case '.':
return '.';
case '-':
return '-';
case '_':
return '_';
case ' ':
return ' ';
}
return '%';
}
}