Apache Tomcat (almeno prima di Tomcat 6 vedere nota) tratta una barra con percentuale codificata (% 2F) in un percorso URI proprio come una barra regolare (vale a dire come un delimitatore di percorso).Perché Apache Tomcat gestisce le barre codificate (% 2F) come separatori di percorso?
Così ad es. Nella pagina servlet esempio di Tomcat è possibile accedere in
http://localhost:8080/examples/servlets/
e alhttp://localhost:8080/examples%2Fservlets/
Questo non ha senso per me. L'intero punto di codifica percentuale di un carattere riservato come "/" è di evitare che venga trattato come un carattere riservato (in questo caso un delimitatore di percorso). Oltre a ciò, questo comportamento è (uno) causa della vulnerabilità CVE-2007-0450. Tuttavia, presumo ci deve essere stata una ragione per questo.
C'è qualche motivo tecnico per cui Tomcat tratta (ok, utilizzati per il trattamento)% 2F come delimitatore di percorso?
C'è qualche situazione in cui questo comportamento è stata utile?
Nota: mi rendo conto che il comportamento di default a causa di CVE-2007-0450 di Tomcat è stato cambiato a respingere barre per cento con codifica nel percorso. Tuttavia, se questo controllo è disabilitato (ALLOW_ENCODED_SLASH), il vecchio comportamento rimane.
Mark, c'è un modo per dire Tomcat * non * treat% 2F come un separatore di percorso? Mi rendo conto che rifiuta la richiesta interamente a meno che non sia impostato il prop citato qui, ma dopo voglio che ".../foo% 2Fbar/..." sia trattato come un elemento di percorso con valore "foo/bar", e non come se fosse ".../foo/bar/..." –
Ho paura di no. La decodifica% si verifica abbastanza presto e una volta decodificata, Tomcat non è in grado di distinguere tra un originale/e una volta decodificato da% 2F. Potresti essere in grado di utilizzare la doppia codifica, ad esempio% 252F, ma non la consiglierei in quanto è il tipo di cosa che ha causato problemi di sicurezza in passato. –
Ho eseguito alcuni test con Tomcat 7 e ho rilevato che non accetta% 2F nel percorso dell'URL: restituisce il codice di stato HTTP 400 "Richiesta non valida". Se passo% 2F in un parametro funziona perfettamente. Se uso% 2C nell'URI viene convertito in "," quindi Tomcat gestisce veramente% 2F in un modo speciale. –