move_uploaded_file - upload image php example
¿No está usando la función del nombre base con $_FILES[''userFile''][''name''] Redundant? (3)
Las solicitudes HTTP pueden falsificarse y, por lo tanto, también se puede manipular el nombre de archivo proporcionado en el encabezado.
Si desea asegurarse de que solo se proporciona un nombre de archivo, valide el valor o filtre con el basename
para obtener el nombre del archivo.
De acuerdo con la sección de cargas del método POST del Manual de PHP , $_FILES[''userfile''][''name'']
es el nombre original del archivo en la máquina del cliente. El ejemplo n. ° 2 en esa sección utiliza la función de basename
con $_FILES[''userfile''][''name'']
como la siguiente:
$uploaddir = ''/var/www/uploads/'';
$uploadfile = $uploaddir . basename($_FILES[''userfile''][''name'']);
Hice algunos experimentos en mi host local ( Apache 2.2.14, PHP 5.3.1, Windows XP ) y descubrí que las siguientes dos líneas son equivalentes:
$_FILES[''userFile''][''name'']; // "file.txt"
basename($_FILES[''userFile''][''name'']); // "file.txt"
Es decir, el uso de la función basename
con $_FILES[''userFile''][''name'']
parece bastante redundante. ¿No es así?
utilizando basename () en una ruta completa, por ejemplo /path/mydir/file.txt
, le devuelve file.txt
. Es útil cuando tienes una ruta completa para analizar y solo quieres obtener la última parte de la ruta.
Es decir, el uso de la función basename con $ _FILES [''userFile''] [''name''] parece bastante redundante. ¿No es así?
No, primero y principalmente por razones de seguridad como describe @Gumbo en su respuesta; en segundo lugar, porque las versiones anteriores de IE solían entregar la ruta completa del archivo en el lado del cliente, como
C:/Documents and Settings/Username/Desktop/Image_cropped.jpg
ese comportamiento se detuvo tan recientemente como IE8. De esta entrada de blog de MSDN descubierta a través de esta pregunta SO :
Control de carga de archivos
Además, la opción de URL "Incluir ruta del directorio local al cargar archivos" se ha establecido en "Deshabilitar" para la Zona de Internet. Este cambio evita la fuga de información del sistema de archivos local potencialmente sensible a Internet. Por ejemplo, en lugar de enviar la ruta completa C: / users / ericlaw / documents / secret / image.png, Internet Explorer 8 ahora solo enviará el nombre de archivo image.png.