Negar acesso a uma pasta específica em .htaccess


130

Estou tentando negar que os usuários acessem a site/includespasta manipulando o URL.

Não sei se tenho que negar tudo e criar manualmente exceções individuais para permitir, se posso apenas negar esta pasta ou se há uma função de reescrita que pode ser usada.

Exemplo específico: não quero ver os arquivos do diretório digitando localhost/site/includesa URL.


1
apenas para não permitir listar diretórios escrever Options -Indexesno arquivo .htaccess localizado na pasta raiz

Respostas:


205

Crie um site/includes/.htaccessarquivo e adicione esta linha:

Deny from all

5
Ei!! anubhava Usei isso para desativar o acesso direto aos meus arquivos api dentro da pasta / api, mas agora todas as chamadas do serviço da web enviam status proibido 403. Eu só quero bloquear o acesso quando alguém acessá-lo do navegador.
— ravisoni

9
Para um servidor da web, não há diferença real entre solicitações entre navegador e não navegador.
— Anubhava

Eu uso o nginx e não posso usar o .htaccess. então, como posso fazer isso sem .htaccess? obrigado
— Shafizadeh

Como posso acessar os arquivos da pasta / subpasta se nego tudo? Os arquivos na pasta / subpasta dão erro 404.
— Vikas Khunteta

2
Deny from allnão dará 404, mas 403. Você ainda pode acessar arquivos / pastas usando PHP / Perl etc, mas não usando uma solicitação da Web. Você pode abrir uma nova pergunta se isso não responder à sua consulta.
— Anubhava

52

Você também pode negar o acesso a uma pasta usando RedirectMatch

Adicione a seguinte linha ao htaccess

RedirectMatch 403 ^/folder/?$

Isso retornará um 403 forbiddenerro para a pasta, ou seja: http://example.com/folder/mas, de fato, bloqueia o acesso a arquivos e pastas dentro dessa pasta, se você deseja bloquear tudo dentro da pasta, basta alterar o padrão regex para^/folder/.*$ .

Outra opção é mod-rewrite Se url-rewrting-moduleestiver ativado, você pode usar algo como o seguinte em root/.htaccss:

RewriteEngine on

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

Isto irá mapear internamente um pedido folderda forbiddenpágina de erro.


1
Com Apache 2,22 a melhor solução é a primeira: RedirectMatch .....
— John

6
Muito prefere esta resposta, em vez de criar vários .htaccessarquivos em todos os diretórios aos quais preciso negar acesso.
— DanMad

40

Em um .htaccessarquivo, você precisa usar

Deny from  all

Coloque isso site/includes/.htaccesspara torná-lo específico para oincludes diretório

Se você deseja apenas proibir uma lista de arquivos de diretório, você pode usar

Options -Indexes 

2
Isso é recursivo?
— Abdillah

@Abdillah Sim, é
— Oliver M Grech

18

Definiremos o diretório para ser muito seguro, negando acesso a todos os tipos de arquivos. Abaixo está o código que você deseja inserir no arquivo .htaccess.

Order Allow,Deny 
Deny from all 

Como agora definimos a segurança, queremos permitir o acesso aos tipos de arquivos desejados. Para fazer isso, adicione o código abaixo ao arquivo .htaccess sob o código de segurança que você acabou de inserir.

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

seu .htaccessarquivo final será semelhante

Order Allow,Deny 
Deny from all 

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

Origem de Permitir acesso a tipos de arquivos específicos em um diretório protegido


Essa resposta me salvou muita dor de cabeça. Funciona como um encanto.
— Eu tento muito, mas choro mais

9

Você pode criar um arquivo .htaccess para a pasta, que deveria ter negado o acesso com

Deny from  all

ou você pode redirecionar para uma página 404 personalizada

Redirect /includes/ 404.html

6

Basta colocar .htaccess na pasta que você deseja 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>

Fonte: fontes MantisBT .


4

Você também pode colocar isso IndexIgnore * no arquivo .htaccess raiz para desativar a listagem de arquivos de todos os diretórios do site, incluindo o subdiretório


6
Isso não desativa a listagem de arquivos, mas diz ao indexador automático para ignorar todos os arquivos ao criar o índice. Para desativar a listagem de arquivos, você usaria Options -Indexes.
— Vladimir Kornea

3

Criar index.php, index.html, index.htm não é seguro. Qualquer pessoa pode obter acesso aos seus arquivos no diretório especificado, adivinhando o nome dos arquivos. Por exemplo: http://yoursite.com/includes/file.dat Portanto, o método recomendado é criar um arquivo .htaccess para negar todos os visitantes;). Diverta-se !!


2

Você pode fazer isso dinamicamente dessa maneira:

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

0

Por algumas razões que eu não entendi, a criação da pasta / .htaccess e a adição de Negar de Tudo falharam em trabalhar para mim. Não sei por que, parecia simples, mas não funcionou, adicionando RedirectMatch 403 ^ / folder /.*$ à raiz que o htaccess funcionava.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.