2011-01-06 10 views
11

Tengo un archivo php que hereda (incluye) otros archivos PHP. Todos los archivos heredados se encuentran en una carpeta llamada "incluye". Quiero poder restringir cualquier acceso directo a esta carpeta. Solo los archivos PHP dentro del servidor pueden comunicarse con los archivos en la carpeta "incluye". ¿Cómo puedo usar .htaccess para lograr ese objetivo?.htaccess para restringir el acceso a la carpeta

FYI, he utilizado el siguiente código y no funcionó

Order deny,allow 
deny from all 

Cualquier ayuda se agradece

+0

Si esto no funciona, puede ser que httpd.conf está configurado para no leer archivos .htaccess. Por ejemplo: AllowOverride None Cambiar a otra cosa (por ejemplo AllowOverride All) y reiniciar el servidor web. – user535673

Respuesta

19

Si no tiene la opción de mover realmente el "incluye" carpeta fuera de la zona de raíz de documento, y con el include_path (es decir, no se puede llegar a ella desde la web), a continuación, introduzca

deny from all 

en un directorio .htaccess en ese directorio.

Sin embargo, la alternativa es usar una directiva DEFINES para permitir solo el acceso a aquellos que incluyen programas mediante archivos autorizados específicos. Por ejemplo, poner

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

en la parte superior de los archivos de inclusión, y luego poner

<?php define('ACCESS_ALLOWED', 1); ?> 

en los programas que se le permite incluir esos archivos.

Esto evitará informal llega a los archivos de inclusión se ejecute ellos, y funcionará para cualquier servidor web, no sólo los archivos .htaccess de apoyo.

3

en su includes/.htaccess:

Order deny,allow 
deny from all 
+0

Lo intentó pero no funcionó –

2

en realidad se puede simplemente utilice un index.php y pase un encabezado 404 usando header():

header('HTTP/1.1 404 Not Found', 404); 

IMO, esto es mejor que un 403, ya que es como si la carpeta no existe. En cuanto a los archivos de inclusión, poner esta línea por encima de la primera include/require línea del archivo principal:

define('INCLUDED', true); 

Y en cada archivo en el directorio incluir, poner esto en la parte superior mayor parte.

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

Es posible que también desee llamar a exit(); después del encabezado, ya que la página aún se puede ejecutar. –

0

Dependiendo de posibles otras opciones establecidas en un nivel superior puede que tenga que utilizar:

Satisfy all 
Order deny,allow 
Deny from all 

me encontré con esto cuando el directorio superior define la autenticación básica, incluyendo la línea:

Satisfy any 

Este impedía que mi denegación de todos tuviese efecto porque los usuarios fueron autenticados.

1

Puede denegar el acceso directo a la carpeta mediante las siguientes Directivas en htaccess o servidor.config Contex:

Mod-alias solución basada

Redirect 403 ^/folder/.+$ 

Esto redireccionará todos los archivos y directorios de la página 403 a/carpeta/prohibido error.

Mod-reescritura solución base:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F] 
Cuestiones relacionadas