Archivo de carga segura

1

He subido el archivo del sistema en mi proyecto php.

Lo que hago al subir:

1) Compruebe la extensión de archivo y el tipo de mime de archivo.

2) Si la extensión y el tipo mime son tipos permitidos, guardo el archivo fuera del directorio public_html y luego, les doy la oportunidad a los usuarios, descargo el archivo para:

 if (file_exists($file_path)) {
        header('Content-Description: File Transfer');
        header('Content-Type: some mime type');
        header('Content-Disposition: attachment; filename=somefilename');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file_path));
        readfile($file_path);
 }

Pregunta: estos pasos para subir archivos, ¿son seguros o no? Si no es así, ¿qué puede hacer adicional para mejorar la seguridad al cargar el archivo?

Gracias.

p.s. misma pregunta en stackoverflow

    
pregunta OTAR 04.02.2014 - 20:11
fuente

3 respuestas

1

Una mejora marginal que podría hacer es mover los archivos cargados a un lugar donde PHP en el servidor web no pueda acceder a ellos. Esto implicará necesariamente algún otro script no activado por el servidor web, como un trabajo cron o un sistema de cola asíncrono como Rabbit.

El ataque que esto evita es la escalada desde la inclusión de un archivo local a un compromiso completo del servidor.

Si un atacante conoce una vulnerabilidad de LFI y puede cargar archivos en el mismo servidor web, puede usar esa combinación para comprometer el servidor. Si su sistema de carga mueve los archivos a un lugar al que el servidor web no puede acceder (fuera de PHP open_basedir con safe_mode establecido en on o incluso a un servidor separado), la vulnerabilidad de LFI no se puede explotar para incluye archivos cargados por el atacante.

    
respondido por el Ladadadada 04.02.2014 - 21:37
fuente
1

Una de las mejoras que podría observar es la realización de escaneos de malware de los archivos cargados. Si bien esto no será una protección al 100%, podría ayudar a reducir el riesgo de que uno de sus usuarios cargue accidentalmente (o deliberadamente) un archivo malicioso que podría infectar a otros usuarios.

    
respondido por el Rоry McCune 04.02.2014 - 20:39
fuente
0

Puede consultar mi pregunta aquí , que tiene un código válido para manejar las subidas (sobre todo me preocupa Imágenes, pero aún así). En la pregunta abordo un par de problemas y explico cómo los estoy resolviendo.

También la pregunta tiene una excelente respuesta sobre cómo reforzar los permisos de los archivos y usar un dominio adicional para los archivos almacenados.

    
respondido por el Salvador Dali 06.03.2014 - 21:35
fuente

Lea otras preguntas en las etiquetas