2010-04-21 28 views
59

Estoy cargando mis archivos (pdf, doc, flv, etc.) en un búfer y les sirvo a mis usuarios con un script. Necesito mi script para poder acceder al archivo pero no permitir el acceso directo a él. ¿Cuál es la mejor manera de lograr esto? ¿Debo hacer algo con mis permisos o bloquear el directorio con .htaccess?Bloquee el acceso directo a un archivo a través de http, pero permita el acceso de script php

+0

de mayo que echar un vistazo a [esta] [1] [1] : http://stackoverflow.com/q/43951871/2441637 –

Respuesta

77

La manera más segura es guardar los archivos que desea guardar fuera del directorio raíz de la web, como sugirió Damien. Esto funciona porque el servidor web sigue los privilegios del sistema de archivos local, no sus propios privilegios.

Sin embargo, hay muchas empresas de hosting que solo le dan acceso a la raíz web. Para evitar aún las solicitudes HTTP a los archivos, colóquelos en un directorio por sí mismos con un archivo .htaccess que bloquee todas las comunicaciones. Por ejemplo,

Order deny,allow 
Deny from all 

Su servidor web, y por lo tanto el lenguaje del lado del servidor, todavía será capaz de leerlos porque los permisos locales del directorio permiten al servidor web para leer y ejecutar los archivos.

Saludos.

+0

he usado esta carpeta de audio interna pero está deteniendo mi reproductor de audio para reproducir audio.Estoy usando el administrador de sonido 2 para reproducir audio. ¿Hay algún trabajo para permitir que solo el administrador de sonido reproduzca ese archivo de audio pero detenga cualquier otro acceso directo? – sonill

+3

@sonill - Puede listar ciertas direcciones IP para poder acceder a estos directorios. Por ejemplo, agregar una nueva línea con 'Permitir desde 127.0.0.1' permitirá a su servidor, incluido cualquier código del lado del servidor, acceder a los archivos en ese directorio. Más documentación sobre estos bits está disponible en http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html#allow –

+1

"Sin embargo, hay una gran cantidad de empresas de alojamiento que sólo le dan acceso a la raíz del servidor web. " ¿Por qué no pueden esas empresas poner la raíz web un nivel más bajo que la raíz FTP? ¿Tienen cero conocimiento de cómo funciona PHP (o más bien es un descuido que es más probable) o solo se preocupan por su propia seguridad y dinero? Ah, bueno, elija una compañía a la que le importe realmente la seguridad de su sitio web. – FluorescentGreen5

2

¿Los archivos están en el mismo servidor que el script PHP? De ser así, simplemente mantenga los archivos fuera de la raíz web y asegúrese de que su script PHP tenga permisos de lectura para donde estén almacenados.

28

Así es como evité el acceso directo desde la URL a mis archivos ini. Pegue el siguiente código en el archivo .htaccess en la raíz. (Sin necesidad de crear carpeta adicional)

<Files ~ "\.ini$"> 
    Order allow,deny 
    Deny from all 
</Files> 

mi archivo settings.ini está en la raíz, y sin este código es accesible www.mydomain.com/settings.ini

1

Si usted tiene acceso a usted httpd. conf file (en ubuntu está en el directorio/etc/apache2), debe agregar las mismas líneas que al archivo .htaccess en el directorio específico. Es decir (por ejemplo):

ServerName YOURSERVERNAMEHERE 
<Directory /var/www/> 
AllowOverride None 
order deny,allow 
Options -Indexes FollowSymLinks 
</Directory> 

hacer esto para cada directorio que se desea controlar la información, y usted tendrá un archivo en un solo lugar para gestionar todos los accesos. En el ejemplo anterior, lo hice para el directorio raíz,/var/www.

Esta opción puede no estar disponible para alojamiento externo, especialmente alojamiento compartido. Pero es una mejor opción que agregar muchos archivos .htaccess.

2

en httpd.conf para bloquear el navegador & wget acceso para incluir archivos especialmente db.inc o config.inc. Tenga en cuenta que no puede encadenar tipos de archivo en la directiva en su lugar crear varias directivas de archivos.

<Files ~ "\.inc$"> 
Order allow,deny 
Deny from all 
</Files> 

para probar su configuración antes de reiniciar Apache

service httpd configtest 

entonces (grácil reiniciar)

service httpd graceful 
Cuestiones relacionadas