Denegar el acceso a una carpeta específica en .htaccess

131

Estoy tratando de negar a los usuarios el acceso a la site/includescarpeta manipulando la URL.

No sé si tengo que negar todo y hacer excepciones individuales manualmente para permitir, si solo puedo negar esta carpeta, o si hay una función de reescritura que pueda usarse.

Ejemplo específico: no quiero ver los archivos del directorio escribiendo en localhost/site/includesla URL.

snoob dogg
fuente
1
solo para no permitir la inclusión de directorios, escriba Options -Indexesen el archivo .htaccess ubicado en la carpeta raíz

Respuestas:

206

Crea un site/includes/.htaccessarchivo y agrega esta línea:

Deny from all
anubhava
fuente
55
¡¡Oye!! anubhava Lo he usado para deshabilitar el acceso directo a mis archivos api dentro de la carpeta / api, pero ahora todas las llamadas al servicio web envían el estado prohibido 403 ... Solo quiero bloquear el acceso cuando alguien accede desde el navegador.
ravisoni
9
Para un servidor web no existe una diferencia real entre las solicitudes entre el navegador y el que no lo es.
anubhava
Uso nginx y no puedo usar .htaccess. Entonces, ¿cómo puedo hacer eso sin .htaccess? gracias
Shafizadeh
¿Cómo puedo acceder a los archivos de la carpeta / subcarpeta si lo niego? Los archivos en la carpeta / subcarpeta dan un error 404.
Vikas Khunteta
2
Deny from allno dará 404 sino 403. Todavía puede acceder a archivos / carpetas usando PHP / Perl, etc. pero sin usar una solicitud web. Puede abrir una nueva pregunta si eso no respondió a su consulta.
anubhava
52

También puede denegar el acceso a una carpeta usando RedirectMatch

Agregue la siguiente línea a htaccess

RedirectMatch 403 ^/folder/?$

Esto devolverá un 403 forbiddenerror para la carpeta, es decir: http://example.com/folder/pero bloquea el acceso a los archivos y carpetas dentro de esa carpeta, si desea bloquear todo dentro de la carpeta, simplemente cambie el patrón de expresión regular a ^/folder/.*$.

Otra opción es mod-rewrite Si url-rewrting-moduleestá habilitado, puede usar algo como lo siguiente en root/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

Esto asociará internamente una solicitud de folderque forbiddenla página de error.

Amit Verma
fuente
1
Con Apache 2.22, la mejor solución es la primera: RedirectMatch .....
John
66
Prefiero esta respuesta, en lugar de crear varios .htaccessarchivos en cada directorio para el que necesito negar el acceso.
DanMad
40

En un .htaccessarchivo necesitas usar

Deny from  all

Ponga esto site/includes/.htaccesspara que sea específico para el includesdirectorio

Si solo desea no permitir una lista de archivos de directorio, puede usar

Options -Indexes 
Andy
fuente
2
¿Es esto recursivo?
Abdillah
@Abdillah Sí, lo es
Oliver M Grech
18

Configuraremos el directorio para que sea muy seguro, denegando el acceso para todos los tipos de archivos. A continuación se muestra el código que desea insertar en el archivo .htaccess.

Order Allow,Deny 
Deny from all 

Como ahora hemos configurado la seguridad, ahora queremos permitir el acceso a nuestros tipos de archivos deseados. Para hacer eso, agregue el siguiente código al archivo .htaccess debajo del código de seguridad que acaba de insertar.

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

su .htaccessarchivo final se verá así

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Fuente de Permitir acceso a tipos de archivo específicos en un directorio protegido

arthankamal
fuente
Esta respuesta me ahorró mucho dolor de cabeza. Funciona de maravilla.
Lo intento mucho pero lloro mucho el
9

Puede crear un archivo .htaccess para la carpeta, que debería haber denegado el acceso con

Deny from  all

o puede redirigir a una página 404 personalizada

Redirect /includes/ 404.html
Marvin
fuente
6

Simplemente coloque .htaccess en la carpeta que desea restringir

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

Fuente: fuentes MantisBT .

El Padrino
fuente
4

También puede poner esto IndexIgnore * en su archivo raíz .htaccess para deshabilitar la lista de archivos de todos los directorios de su sitio web, incluido el subdirectorio

ravisoni
fuente
66
Esto no deshabilita la lista de archivos, pero le dice al autoindexador que ignore todos los archivos al construir el índice. Para deshabilitar la lista de archivos, usaría Options -Indexes.
Vladimir Kornea
3

Crear index.php, index.html, index.htm no es seguro. Porque cualquiera puede acceder a sus archivos dentro del directorio especificado adivinando el nombre de los archivos. Por ejemplo: http://yoursite.com/includes/file.dat Entonces, el método recomendado es crear un archivo .htaccess para negar a todos los visitantes;). Que te diviertas !!

Meraj
fuente
2

Puede hacer esto dinámicamente de esa manera:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);
RatajS
fuente
0

Por algunas razones que no entendí, la creación de la carpeta / .htaccess y la adición de Denegar de todo no funcionaron para mí. No sé por qué, parecía simple pero no funcionó, agregando RedirectMatch 403 ^ / folder /.*$ a la raíz htaccess funcionó en su lugar.

Chimdi
fuente