2011-05-04 11 views
5

En mi proyecto, los usuarios pueden cargar archivos de cualquier tipo. Necesito garantizar la seguridad contra la ejecución de archivos cargados que pueden ser analizados por php (* .php, * .html, etc.)¿Impedir la ejecución de archivos php cargados?

¿Hay alguna manera de decirle a apache que no analice ningún archivo con php en web/uploads y simplemente mostrarlos como texto sin formato? ¿Cuáles son otras opciones?

+1

Si desea que solo se muestren como un archivo de texto sin formato, ¿por qué no simplemente cambiarles el nombre a filename.txt cuando se cargan? O si está buscando conservar la extensión original, filename.php.txt. Si no se ejecuta, se tratará como un archivo de texto. –

+0

Esto agrega un poco de sobrecarga para un cliente, si quiere descargar un archivo y ejecutarlo en su máquina. Imagine lo que se necesita para hacerlo en Windows, si tiene las extensiones ocultas. =) – Dziamid

Respuesta

11

mantener a todos en la misma carpeta y establecer esta línea en el archivo del directorio de .htaccess:

php_flag engine off 

Eso también se hará cargo de otras vulnerabilidades como incrustación de código PHP en archivos .gif.

+0

Esto funciona. Sin embargo, si el archivo es * .php, el navegador intenta descargar un archivo. ¿Cómo puedo forzar el encabezado "Content-Type \t text/plain" en este caso? – Dziamid

+1

@Dziamid: No lo he intentado yo mismo, pero creo que 'AddType text/plain .php' debería ser el truco. – Kaivosukeltaja

0

¿por qué no cambiar el nombre de las extensiones de archivo al cargarlo al .phps?

Para aclarar PHPS es la vista de código fuente de un archivo PHP:

Para aclarar:

file.php =>file.phps

rápida Google ejemplo:

+0

Esto es bastante sencillo, pero me gustaría conservar los nombres originales. – Dziamid

+0

no no me malinterpretas CAMBIAR la extensión, no el nombre de archivo 'file.php' se convierte en' file.phps' apenas un gran cambio. – Jakub

+1

no, lo entiendo. Me gustaría que los usuarios descarguen un archivo sin necesidad de cambiar el nombre de la extensión para poder ejecutarla en sus máquinas. – Dziamid

2

desea que el directiva de Apache SetHandler: http://httpd.apache.org/docs/current/mod/core.html#sethandler

Esto le permite forzar todos los archivos en un directorio para ser procesado por un determinado controlador. Así que algo similar a:

<Location /web/uploads> 
SetHandler None 
</Location> 

debe hacer lo que desee.

+0

Esto funciona bien. * Los archivos .php se distribuyen con el encabezado "Content-Type \t text/html". ¿Puedo lograr lo mismo con .htaccess? – Dziamid

+0

Supongo que puede hacer lo mismo: los documentos dicen que se puede usar dentro de los archivos .htaccess. – Femi

+0

De hecho dicen que puede ser, pero no tiene ningún efecto en .htaccess context. Tengo AllowOverride establecido en Todo en el host virtual. – Dziamid

Cuestiones relacionadas