ver sitio restringir publicar permisos ocultar mostrar htaccess directorios directorio denegar crear carpetas carpeta archivos archivo acceso php regex apache .htaccess mod-rewrite

php - sitio - publicar carpeta en apache



denegar el acceso directo a una carpeta y archivo por htaccess (7)

Aquí está el escenario:

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

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


1 solución basada en liner mod_alias:

RedirectMatch 403 ^/folder/file.php$

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


Dependiendo de otras posibles opciones establecidas en un nivel superior, es posible que deba incluir lo siguiente en su archivo .htaccess en su directorio includes:

Satisfy all Order deny,allow Deny from all

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

Satisfy any

Esto impedía que mi denegación de todo tuviese efecto porque los usuarios se autenticaron.


Es posible usar una directiva de Archivos y no permitir el acceso a todos los archivos, luego usarlo nuevamente para establecer los archivos que son accesibles:

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


Esta es una solución pura basada en mod_rewrite :

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

Esto mostrará un error prohibido de usar si el URI contiene /includes/ or /submit.php


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.


Simplemente movería la carpeta de inclusión de la raíz web, pero si desea bloquear el acceso directo a la carpeta completa includes , puede poner un archivo .htaccess en esa carpeta que contiene solo:

deny from all

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


Su Q viene en dos partes, tanto las soluciones de Jeroen como las de anubhava funcionan para la Parte I, denegando el acceso a / includes. anubhava también funciona para la parte II. Prefiero el último porque uso un DOCROOT/.htaccess todos modos y esto mantiene todo dicho control en un 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 la usas como un objetivo de acción en algunos formularios y solo quieres que se dispare cuando se envía el formulario y no directamente, por ejemplo desde 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 puede hacer aquí es (i) con la comprobación de .htaccess para asegurarse de que la referencia sea 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 formulario PHP index.php incluye 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 manera 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.