[Php] denegar el acceso directo a una carpeta y archivo por htaccess


Answers

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

Question

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




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.