¿Por qué este código se considera peligroso o vulnerable?
String sFileName = request.getParameter("fName");
if (sFileName.toLowerCase().endsWith(".pdf"))
// open file
else
// don’t open the file
¿Por qué este código se considera peligroso o vulnerable?
String sFileName = request.getParameter("fName");
if (sFileName.toLowerCase().endsWith(".pdf"))
// open file
else
// don’t open the file
Además de los ataques de recorrido de ruta, este código podría ser vulnerable a la inyección de Null-Byte. Para obtener más información, lea this .
Actualización:
Como señaló Maarten Bodewes, esto se ha solucionado desde Java 1.7.0_40. Recuerdo que esto es una vulnerabilidad en 1.6 aunque.
De todos modos, cuando eche un vistazo al código fuente de la clase File
, encontrará que se ha agregado el método isInvalid()
, que realiza la comprobación de nulos:
final boolean isInvalid() {
if (status == null) {
status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED
: PathStatus.INVALID;
}
return status == PathStatus.INVALID;
}
Consulte también esta publicación en stackoverflow .
Ahora mismo veo 2 problemas con este código, dependiendo del contexto.
.pdf
no significa que sea un PDF
expediente. Lo que podría llevar a todo tipo de problemas. Pero como dije, todo depende del contexto.
Lea otras preguntas en las etiquetas java