Perché questo codice è considerato pericoloso o vulnerabile?
String sFileName = request.getParameter("fName");
if (sFileName.toLowerCase().endsWith(".pdf"))
// open file
else
// don’t open the file
Perché questo codice è considerato pericoloso o vulnerabile?
String sFileName = request.getParameter("fName");
if (sFileName.toLowerCase().endsWith(".pdf"))
// open file
else
// don’t open the file
Oltre agli attacchi Path Traversal, questo codice potrebbe essere vulnerabile all'iniezione di Null-Byte. Per maggiori informazioni leggi questo .
Aggiornamento:
Come sottolineato da Maarten Bodewes, questo problema è stato risolto da Java 1.7.0_40. Ricordo che questa era una vulnerabilità in 1.6 però.
Ad ogni modo quando dai un'occhiata al codice sorgente della classe File
trovi che è stato aggiunto il metodo isInvalid()
che esegue il controllo null-byte:
final boolean isInvalid() {
if (status == null) {
status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED
: PathStatus.INVALID;
}
return status == PathStatus.INVALID;
}
Vedi anche questo post su stackoverflow .
In questo momento vedo 2 problemi con questo codice, a seconda del contesto.
.pdf
non significa che sia un PDF
file. Quale potrebbe portare a tutti i tipi di problemi. Ma come ho detto, tutto dipende dal contesto.
Leggi altre domande sui tag java