2010-02-26 30 views
10

Tengo un script que solo permite a los usuarios autorizados cargar archivos en una carpeta determinada.¿Cómo evito las descargas públicas de archivos usando php?

Sin embargo, no sé cómo evitar que las personas descarguen libremente sin iniciar sesión.

Necesito la solución en php.

He buscado en Google, pero nada sencillo todavía.

Actualmente en mi raíz de documento tengo una carpeta llamada admin y una subcarpeta llamada cargas dentro del administrador. Por lo tanto, solo se puede subir la función de administrador. Tanto el editor como el administrador pueden descargar. ¿Qué debería hacer en este caso?

Por favor, asesorar.

Respuesta

13

Coloque los archivos en algún lugar fuera del directorio webroot público, o configure su servidor para que no sirva los archivos. Mientras su servidor sirva felizmente todo con una URL válida, no hay nada que pueda hacer con PHP para evitar eso.


Si los archivos están en la carpeta /public_html/, sacarlos de esa carpeta y colocarlos en, por ejemplo, /secret_files/, por lo que su estructura de directorios es como la siguiente:

public_html/ 
    index.html 
    admin/ 
     admin_index.php 
secret_files/ 
    my_secret_file.txt 

El servidor web solamente está configurado para servir los archivos en el directorio /public_html/, por lo que nadie tendrá acceso a directorios fuera (término técnico anterior) de ella.

Para permitir que alguien descargue esos archivos, haga lo que cletus sugiere y use readfile para "servir manualmente" los archivos mediante un script PHP. PHP aún tendrá acceso a estas otras partes del sistema de archivos, por lo que puede usarlo como guardián de acceso.

+0

es el webroot público el public_html? wat sobre httpdocs? –

+0

@keisimone Ver respuesta actualizada. – deceze

+0

gracias. eso es mucho más claro. Ustedes son geniales. –

5

Respondiendo a la pregunta sobre cómo proteger con contraseña con PHP: This debería resolver su problema.

+0

y ¿qué pasa si alguien encuentra la contraseña? – RageZ

+4

Si encuentran la contraseña, lo más probable es que tengan acceso a su FTP, de modo que quedará atornillado de todos modos. – twodayslate

9

No guarde los archivos en un directorio debajo de la raíz del documento.

En lugar de moverlos a otro lugar y luego un script PHP puede determinar mediante programación si alguien puede descargarlos y luego usar readfile() o algo similar para transmitirlos al usuario.

También podría configurar el servidor web para que no sirva archivos desde este directorio, pero luego necesita que PHP los atienda de todos modos. Es más limpio simplemente no ponerlos debajo de la raíz del documento.

+0

hola cletus, no soy fuerte en programación así que necesito pedirte más detalles 1) ¿Dónde está en otro lugar? Actualmente, en mi raíz de documento, tengo una carpeta llamada admin y una subcarpeta llamada uploads dentro del administrador. por lo que solo la función de administrador puede cargarse. tanto el editor como el administrador pueden descargar. ¿Qué debo hacer en este caso? –

+1

@keisimone (1) Guárdelos encima de la raíz del documento, que * puede * ser algo así como htdocs o public_html. – alex

+0

@alex sí, todos mis archivos ya están en public_html :) por lo que su public_html> admin> carga –

Cuestiones relacionadas