2009-05-06 11 views
15

Para mi aplicación web, las personas pueden subir imágenes desde un formulario web a mi servidor web.¿Cómo puedo proteger el directorio de carga de imágenes de un servidor web?

¿Qué debo establecer la configuración de CHMOD para ese directorio de carga de imágenes para que las personas puedan subir imágenes (desde el servidor web) a ese directorio pero no ejecutar ningún archivo que carguen por razones de seguridad.

¿Sería la configuración de chmod? :

chmod 744 directory/ 

Respuesta

0

Chmod en el directorio no puede hacer esto, y por otra parte su servidor web puede interpretar como ejecutable php no importa cuál es el modo. Probablemente quiera especificar qué servidor está usando, puede haber un .htaccess o una directiva similar que pueda usar.

Tenga en cuenta que 'ejecutar' en los directorios significa 'puede acceder a los archivos dentro del directorio', por lo que se deben establecer si desea que su servidor web para tener acceso a los archivos dentro ...

22

Hay dos posibles significados para "ejecutable" en este contexto, y ambos son cosas con las que debe configurar.

  1. Un archivo binario ejecutable que puede ejecutar desde la línea de comandos escribiendo el nombre del archivo en una cáscara

  2. Un archivo que puede ser leído y procesada como guión de un servidor web.

Manipulación binario ejecutable

Para configurar contra la caja 1 en un sistema * x ONU, es necesario asegurarse de que el directorio de carga, y los archivos en el mismo, son propiedad del usuario del servidor web y solo legible por ese usuario. El directorio debe ser ejecutable; esto significa que se puede acceder a los archivos dentro de ese directorio). Si el usuario web necesita listar los archivos en el directorio, también debe ser legible. Por supuesto, también debe poder escribirse para permitir la creación de nuevos archivos.

Así, el conjunto octal desea habría

chown <web-server-user> <upload-dir> 
chmod 0700 <upload-dir> 

Los archivos no deben ser ejecutables y sólo debería ser de lectura y escritura por el servidor web, por lo que estos deben ser

chmod 0600 <uploaded-file> 

Tenga en cuenta esto significa que solo el usuario del servidor web podrá ver estos archivos. Esta es la mejor situación para la seguridad. Sin embargo, si usted realmente no necesita otros usuarios locales para poder ver estos archivos, a continuación, utilizar

chmod 0755 <upload-dir> 
chmod 0644 <uploaded-file> 

Manejo servidor web excutable

Codificación contra la caja 2 es el servidor web específico.

Una opción es colocar el directorio de carga fuera de la raíz web, disolviendo el acceso URL directo a los archivos cargados por completo y solo para servirlos a través del código del lado del servidor.Su código lee y repite el contenido del archivo, lo que garantiza que el servidor web nunca lo procesa como script.

La otra opción es configurar su servidor web para que no permita el procesamiento de scripts de los archivos en el directorio de carga. Esta configuración es específica del servidor web. Sin embargo, por ejemplo, en Apache se puede lograr esto esta por entrar en la configuración del servidor:

<Directory "path-to-upload-dir"> 
    AllowOverride None 
    Options -ExecCGI 
</Directory> 

AllowOverride None es importante, ya que evita que cualquier subida de un archivo .htaccess en el directorio de archivos y volver a la configuración de la web permisos de servidor para ese directorio.

+0

No es mi área de conocimiento, pero tuve el php_admin_flag resaltado como algo más para agregar a esto. Agregue "php_admin_flag engine off" debajo de la línea de Opciones. \t AllowOverride None \t Opciones -ExecCGI \t motor fuera php_admin_flag Jake

Cuestiones relacionadas