2012-07-30 20 views
78

Tengo el siguiente archivo .htaccess:Cómo denegar el acceso a un archivo .htaccess en

RewriteEngine On 
RewriteBase/

# Protect the htaccess file 
<Files .htaccess> 
Order Allow,Deny 
Deny from all 
</Files> 

# Protect log.txt 
<Files ./inscription/log.txt> 
Order Allow,Deny 
Deny from all 
</Files> 

# Disable directory browsing 
Options All -Indexes 

Estoy tratando de prohibir a los visitantes para acceder al siguiente archivo:

domain.com/inscription/log.txt 

pero lo que arriba no funciona: todavía puedo acceder al archivo desde el navegador de forma remota.

Respuesta

137

Dentro de un archivo htaccess, el alcance de la directiva <Files> solo se aplica a ese directorio (supongo que para evitar confusiones cuando las reglas/directivas en htaccess de subdirectorios se aplican supercedientes del padre).

Así que puedes tener:

<Files "log.txt"> 
Order Allow,Deny 
Deny from all 
</Files> 

En un archivo .htaccess en su directorio inscription. O puede usar mod_rewrite para una especie de manejar ambos casos niegan el acceso a htaccess, así como registro.txt:

RewriteRule /?\.htaccess$ - [F,L] 

RewriteRule ^/?inscription/log\.txt$ - [F,L] 
+0

Si su uso de IIS, haga lo siguiente en el archivo web.config en su lugar. –

+0

Usar las reglas de reescritura no permite que mi propio código acceda a los contenidos de * .txt. ¿Cómo te las arreglarías con esto? – Pantss

+3

"el alcance de la directiva' 'solo se aplica a ese directorio" - no, no es así. Se aplica a ese directorio _y_ a todos los subdirectorios debajo de él. Entonces '' capturará '/ log.txt' _and_'/inscription/log.txt'. – MrWhite

13

patrón de juego fuerte - Este es el método que utilizo aquí en perecederos Press. Usando una fuerte coincidencia de patrones, esta técnica evita el acceso externo a cualquier archivo que contenga ".hta", ".HTA", o cualquier combinación de mayúsculas y minúsculas. Para ilustrar, este código impedirá el acceso a través de cualquiera de las siguientes solicitudes:

  • .htaccess
  • .htaccess
  • .htaccess
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT. hTaCcEsS

..etc., etc. Claramente, este método es altamente effecti para asegurar los archivos HTAccess de su sitio. Además, esta técnica también incluye la directiva enriquecedora "Satisfy All". Tenga en cuenta que este código debe ser colocado en el archivo HTAccess raíz de su dominio:

# STRONG HTACCESS PROTECTION 
<Files ~ "^.*\.([Hh][Tt][Aa])"> 
order allow,deny 
deny from all 
satisfy all 
</Files> 
+0

Recibo un error interno de 500 servidores cuando uso este código. ¿Alguna idea de por qué? Estoy usando Wordpress. –

+3

¿No tendría más sentido simplemente prohibir a los usuarios el acceso a los archivos punto? Usando algo como ''. –

7

No creo que la respuesta aceptada actualmente es la correcta. Por ejemplo, tengo el .htaccess siguiente archivo en el directorio raíz de un servidor virtual (Apache 2.4):

<Files "reminder.php"> 
require all denied 
require host localhost 
require ip 127.0.0.1 
require ip xxx.yyy.zzz.aaa 
</Files> 

Esto impide el acceso externo a reminder.php que está en un subdirectorio. Tengo un archivo similar .htaccess en mi servidor Apache 2.2 con el mismo efecto:

<Files "reminder.php"> 
     Order Deny,Allow 
     Deny from all 
     Allow from localhost 
     Allow from 127.0.0.1 
    Allow from xxx.yyy.zzz.aaa 
</Files> 

No sé con seguridad, pero sospecho que es el intento de definir el subdirectorio específicamente en el archivo .htaccess, a saber<Files ./inscription/log.txt> que está causando que falle. Sería más simple poner el archivo .htaccess en el mismo directorio que log.txt, es deciren el directorio inscription y funcionará allí.

+0

Recibes mi voto favorable, esto también funcionó para mi apache 2.4. – Tschallacka

0

Coloque la línea de abajo en su archivo .htaccess y reemplazar el nombre de archivo que desea

RewriteRule ^(test\.php) - [F,L,NC] 
-2

Bien podría utilizar la etiqueta <Directory> por ejemplo:

<Directory /inscription> 
    <Files log.txt> 
    Order allow,deny 
    Deny from all 
    </Files> 
</Directory> 

No utilice ./ porque si solo usa / mira el directorio raíz de su sitio.

Para un ejemplo más detallado visita http://httpd.apache.org/docs/2.2/sections.html

+1

Pero un contenedor '' no está permitido en '.htaccess'. En '.htaccess', el archivo' .htaccess' en sí es el "_Directory_ container" (archivo de configuración por directorio). – MrWhite

+0

Bueno, entonces podría usar el redireccionamiento. 'Redirect /inscription/log.txt access_denied.html' Esto redirigirá al usuario a' access_denied.html' si el usuario va a 'inscription/log.txt' en el directorio de inscripción. –

Cuestiones relacionadas