Fissaggio errore di Manipolazione del Percorso

Fortificare sta dando Percorso di Manipolazione di errore sulla riga in cui il nuovo File(path) è effettuato il confronto. Sto utilizzando Struts 2.

Uno può dirmi come risolvere questo problema, in modo da fortificare non dare questo errore?

private boolean filePresent(String fileName) {
    if (fileName != null) {
        String path = getDirPath();
        if (path != null) {
            path = path.endsWith("/") ? path : path + "/";
            path = path + fileName;
            if (new File(path).exists()) {
                setFileName(fileName);
                return true;
            }
        }
    }
    return false;
}

Ho bisogno di vedere se il file è presente o meno nel nostro server web & di conseguenza, mi sto passando il nome del file come argomento, l’intero percorso della directory da web.xml, aggiungendo al nome del file & comporre il percorso & verifica contro l’oggetto File per vedere se è presente o meno.

InformationsquelleAutor Mike | 2012-03-16

 

2 Replies
  1. 5

    Non si desidera il telecomando utente web per vedere se C:/Windows/System32 esiste, o se /etc/hosts esiste, perché permette loro di fare la ricerca sul server.

    Che probabilmente non ti rendi conto che la tua funzione permette loro di fare proprio questo, includendo un numero appropriato di “..” sequenze nella stringa di input.

    Ci sono due modi per interrompere il problema:

    1. Whitelist approccio. Scrub tutti i caratteri di un parametro di input e consentire solo “a” e “z” e forse “.” Lanciare un’eccezione se l’input cade al di fuori di questi limiti.

    1a. Oppure, se si conosce l’elenco dei file validi è inferiore a 20, appena li elenco e se l’input non fare una corrispondenza esatta, lancia una eccezione.

    1. Blacklist approccio. Controllare l’ingresso e genera un’eccezione se contiene la sequenza di “..” o le barre o le barre rovesciate. Questo in genere non è una difesa in profondità, ma per la funzione, come ho letto giusto ora, questo potrebbe essere OK.
    • Ciao @Douglas, Per il nostro progetto, stiamo usando blacklist “(\\.\\.\\\\|\\\\|\\.\\./|/)” Ma non ricevo come può essere utilizzato come blacklist come ogni percorso avrà sempre le barre o le barre rovesciate (scusate se la domanda è troppo di base, considerando che io non sono così bravo a espressioni regolari).
    • Ciao Gaurav, questo non è tanto sulle regex ma su previsto per gli ingressi. Nota se getFilePath() restituisce “D:\App\files” e il nome del file = “foo.txt” allora l’esistenza verrà controllato D:\App\files\foo.txt. Ti aspetti “subdir\\foo.txt” invece? Ti gestire correttamente “subdir/foo.txt”? Non posso valutare la tua regex domanda, se non si forniscono le attuali Java espressione di confronto.
  2. 0

    Si può anche usare il filtro per farlo come

    nel Filtro

    chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);

    in RequestWarper usare qualcosa come

    if(value.contains("..\\"))
    value = value.replace("..\\", "");
            if(value.contains("../"))
                value = value.replace("../", "");
            if(value.contains("./"))
                value = value.replace("./", "");

Lascia un commento