¿Está cambiando las extensiones de archivo en la carga de archivos PHP para evitar la ejecución del código?

1

Creo que en una carga de archivos PHP es una buena práctica almacenar archivos fuera de la raíz del documento con un nombre de archivo generado aleatoriamente y decirle al servidor que los haga no ejecutables, por lo que el archivo no se ejecutará por un intento para acceder al archivo a través de HTTP.

Si almacenarlos fuera de la raíz y evitar que se ejecuten en absoluto no es posible en un entorno en particular, ¿ayudaría a alterar la extensión de los archivos a uno que ciertamente no se tratará como un script o algo similar?

Después de la carga, la extensión real podría guardarse en una base de datos y el archivo se guardará en el sistema de archivos como sd7dsf9gd7s8sd9876asd.secureExtension en lugar de dangerousScript.php .

¿Sería esto suficiente protección? ¿Qué extensión sería la mejor, entonces?

    
pregunta kot 23.01.2017 - 16:13
fuente

2 respuestas

0

Siempre será posible. Por ejemplo, si hay un script de shell, no importa lo difícil que sea evitar su ejecución, es probable que un simple sh something lo ejecute.

Si está fuera del directorio raíz de virtualhost, seguramente es una buena idea, cierra el ataque más común (cargar algo que no es lo que parece y luego engañar al servidor web para que lo ejecute).

Nota: en Unixes, la extensión del archivo no significa mucho para que el SO determine, qué tiene que ver con eso, el SO lo decide principalmente en función de su contenido. En realidad, ni siquiera hay extensiones de archivo (son simplemente parte del nombre del archivo, después del primer punto).

Si desea asegurarse:

  • Primero, no use "listas negativas", es decir, no especifique qué "no debe hacerse". Por defecto, todo debería estar prohibido. Tenga una lista corta y positiva, lo que "podría hacerse".
  • Para aplicar esta concepción, creo que la mejor idea si examinas los contenidos de los archivos. Por ejemplo, si sabe que deberían ser imágenes, compruebe su contenido y permita solo archivos png, jpeg, etc.
  • En el caso de la carga de archivos basada en HTTP, también puede insertar restricciones para el tipo mime de los archivos cargados, pero no lo olvide: está establecido por el lado del cliente, es decir, pueden decir un application/png mime escriba, mientras que es esencialmente un script php.

Si un contenido cargado no coincide con su lista corta de los tipos de archivos permitidos, envíe un mensaje de error al menos parcialmente engañoso al usuario (por ejemplo, "carga no permitida" o similar) e inicie una alarma de seguridad .

    
respondido por el peterh 23.01.2017 - 16:26
fuente
1

Si su servidor web está configurado correctamente (es decir, no ejecutará archivos con extensiones arbitrarias como archivos PHP), este enfoque funcionará contra la ejecución del código PHP *.

La verificación / cambio de extensiones también es el enfoque correcto (al lado de almacenar los archivos fuera de la raíz web). La verificación de los tipos mime no es confiable , complejo, y puede ser evitado por un atacante.

Debe usar una extensión no existente o una que no tenga significado en el contexto dado (es decir, no .js, .html, .php, etc.). A menudo, no se utiliza ninguna extensión.

* Al menos visitando directamente el archivo; el código aún puede ejecutarse si el archivo, por ejemplo, se incluye y ejecuta en otro lugar

    
respondido por el tim 23.01.2017 - 16:56
fuente

Lea otras preguntas en las etiquetas