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.

snoob dogg
fonte
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
anubhava
fonte
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.

Amit Verma
fonte
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 
Andy
fonte
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

arthankamal
fonte
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
Marvin
fonte
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 .

O padrinho
fonte
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

Ravisoni
fonte
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 !!

Meraj
fonte
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);
RatajS
fonte
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.

Chimdi
fonte