Come risolvere l'errore di Manipolazione del percorso dato da fortificare?

3

Ho bisogno di leggere il file delle proprietà contenuto nella cartella home dell'utente.

PropertyFile=System.getProperty("user.home")+System.getProperty("file.separator")+"sample.properties";

Fortify sta dando errore di manipolazione del percorso in questa linea. Come risolvere questo problema?

    
posta Nagendra 28.10.2015 - 05:50
fonte

2 risposte

1

Fortify sta sollevando un problema , non un errore perché tieni preso in input dall'ambiente del processo e poi apri un percorso con esso senza fare alcun filtro di input. Anche se dovessi aggiungere il filtro di input, le probabilità sono basse che Fortify avrebbe dovuto riconoscerlo e smettere di produrre il problema. Quindi, alla fine, probabilmente imposterai l'analisi del problema su Non un problema e smetterai semplicemente di preoccupartene. Ma prima devi determinare se si tratta di una preoccupazione reale per la sicurezza o di un falso positivo.

Quando si tratta di queste proprietà specifiche, sei al sicuro. La Java VM li imposta così, finché Java non è danneggiato, sei al sicuro. Quindi contrassegnali come Non un problema e prosegui.

PS: Sì, Fortify dovrebbe sapere che queste proprietà sono sicure.

    
risposta data 28.10.2015 - 15:50
fonte
0

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 '%';
}

}

    
risposta data 19.06.2017 - 18:12
fonte

Leggi altre domande sui tag