La documentación de PHP para is_uploaded_file dice:
Devuelve VERDADERO si el archivo nombrado por nombre de archivo se cargó a través de HTTP POST. Esto es útil para ayudar a garantizar que un usuario malintencionado no haya intentado engañar a la secuencia de comandos para trabajar en archivos en los que no debe ser trabajando, por ejemplo,
/etc/passwd
.
También sugiere esto:
Para que funcione correctamente, la función is_uploaded_file () necesita un argumento Me gusta $ _FILES ['archivo_usuario'] ['nombre_mpmp'], - el nombre del archivo cargado en la máquina del cliente $ _FILES ['archivo de usuario'] ['nombre'] no funciona.
Pero, por lo que sé, tmp_name
no está controlado por el usuario de todos modos, por lo que la verificación no debería ser obligatoria.
Y si uso name
en lugar de tmp_name
al cargar archivos (por ejemplo, usando copy
en lugar de move_uploaded_file
), mi script de carga de archivos no funcionará, ya que siempre movería el error. expediente.
Mis preguntas:
- Los comentarios mencionan que
move_uploaded_file
realiza la comprobación deis_uploaded_file
, ¿es cierto? - ¿El usuario
tmp_name
está controlado de alguna manera? - ¿Existe un escenario realista en el que
is_uploaded_file
realmente se requiere al cargar un archivo, o al realizar cualquier otra acción como leer, eliminar, etc., ya que habría una vulnerabilidad sin él? ¿O es la función completamente inútil?