2012-02-14 20 views
112

Aquí está el panorama:denegar el acceso directo a una carpeta y el archivo .htaccess por

  • hay un archivo en la carpeta raíz index.php
  • algunos archivos están incluidos en index.php que están en la carpeta includes.
  • 1 otro archivo (submit.php) se encuentra en la carpeta raíz para la acción de envío de formulario.

Quiero restringir el acceso directo del usuario a los archivos en la carpeta includes de htaccess. también para submit.php. Pero include funcionará para el archivo index.php. Me gusta, si el usuario mecanografía www.domain.com/includes/somepage.php, lo restringirá (puede ser redirigido a una página de error).

Respuesta

228

me acaba de mover la carpeta includes de la web de la raíz, pero si quieres bloquear el acceso directo a toda la carpeta includes, se puede poner un archivo .htaccess en esa carpeta que contiene simplemente:

deny from all 

De esta manera no puede abrir ningún archivo de esa carpeta, pero puede incluirlos en php sin ningún problema.

+4

¿Algún otro archivo podrá hacer una solicitud ajax al archivo presente en esa carpeta? –

+13

@ChaitanyaChandurkar No, una solicitud de AJAX es una solicitud http normal, por lo que será denegada. – jeroen

+0

Sr b/c I nueva programación web. ¿Cómo puedo agregar una excepción para acceder a mi archivo index.php? – PhatHV

8

Si entiendo correctamente, ¿quiere negar el acceso a la carpeta includes?

Un .htaccess con una directiva 'DENY FROM ALL' colocado en la carpeta includes haría el truco.

44

Esto es pura mod_rewrite solución basada en:

RewriteRule ^(includes/|submit\.php) - [F,L,NC] 

Esto mostrará el error prohibido su uso si URI contiene ya sea /includes/ o /submit.php

+3

Buen trabajo dirigiéndose al archivo de envío –

8

Su Q viene en dos partes, ambas soluciones Jeroen y anubhava de trabajo para parte I - denegar el acceso a/includes. anubhava también funciona para la parte II. Prefiero el último porque uso un DOCROOT/.htaccess de todos modos y esto mantiene todo dicho control en un solo archivo.

Sin embargo, lo que quería discutir es el concepto de "denegar el acceso a submit.php". Si no quiere usar submit.php, ¿por qué tenerlo en DOCROOT? Sospecho que la respuesta aquí es que lo usa como un objetivo de acción en algunos formularios y solo desea que se dispare cuando se envía el formulario y no directamente, p. de un spambot.

Si esto es cierto, entonces no puedes usar la parte II de anubhava, ya que esto hará que tu formulario falle. Lo que se puede hacer aquí es (i) con el cheque .htaccess para asegurar que el remitente era su propia página de índice:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC] 
RewriteRule ^submit\.php$ -         [F] 

y (ii) dentro de su generador de formularios PHP index.php incluir algunos campos ocultos para una marca de tiempo y validación La validación podría ser, por ejemplo, los primeros 10 caracteres de un MD5 de la marca de tiempo y algún secreto interno. Al procesar el envío, puede (i) validar que la marca de tiempo y la coincidencia de validación, y (ii) la marca de tiempo está dentro de, digamos, 15 minutos de la hora actual.

Esto puede evitar el correo no deseado, ya que la única forma práctica en que un spammer podría obtener un par de validación/validación válido sería analizar un formulario, pero este raspado solo tendría una vida de 15 minutos.

5

Dependiendo de posibles otras opciones establecidas en un nivel superior puede que tenga que poner lo siguiente en su archivo .htaccess en su directorio incluye:

Satisfy all 
Order deny,allow 
Deny from all 

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

Satisfy any 

Esto impedía que mi denegación se aplicara porque los usuarios se autenticaron.

18

Es posible utilizar una directiva de archivos y no permitir el acceso a todos los archivos, a continuación, utilizarla de nuevo para fijar los archivos accesibles: mod_alias

<Files ~ "^.*"> 
    Deny from all 
</Files> 

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif"> 
    Allow from all 
</Files> 
+3

No estoy seguro acerca de quién publicó la pregunta si su problema se resolvió o no, pero esta es la belleza de SO que la respuesta múltiple puede ayudar a muchos miembros. Esta última respuesta resolvió mi problema. Quiero permitir que los sitios obtengan un archivo css pero no tengan acceso a las fuentes ttf u otf, y auge! resuelto. –

+0

después de esto no puedo acceder a los archivos en las subcarpetas –

8

1 liner solución basada en:

RedirectMatch 403 ^/folder/file.php$ 

Esto mostrará un error prohibido para /folder/file.php

+1

+1 - Esto es realmente muy bueno, porque nadie puede ver qué archivos existen si aplica ** 404 ** a una carpeta completa, usando la expresión '^ carpeta' . – bytecode77

Cuestiones relacionadas