Negare l'accesso a una cartella specifica in .htaccess


131

Sto cercando di negare agli utenti di accedere alla site/includescartella manipolando l'URL.

Non so se devo negare tutto e fare manualmente singole eccezioni per consentire, se posso semplicemente negare questa cartella o se esiste una funzione di riscrittura che può essere utilizzata.

Esempio specifico: non voglio vedere i file della directory digitando localhost/site/includesl'URL.


1
solo per impedire l'elenco delle directory scrivere Options -Indexesnel file .htaccess situato nella cartella principale

Risposte:


206

Crea site/includes/.htaccessfile e aggiungi questa riga:

Deny from all

5
Hey!! anubhava L'ho usato per disabilitare l'accesso diretto ai miei file api all'interno della cartella / api ma ora tutte le chiamate al servizio web inviano lo stato proibito 403 .. Voglio solo bloccare l'accesso quando qualcuno accede ad esso dal browser.
Ravisoni,

9
Per un server web non esiste una vera differenza tra le richieste tra browser e non browser.
anubhava,

Uso nginx e non posso utilizzarlo .htaccess. quindi, come posso farlo senza .htaccess? grazie
Shafizadeh,

Come posso accedere ai file della cartella / sottocartella se rifiuto da tutto? I file nella cartella / sottocartella danno l'errore 404.
Vikas Khunteta,

2
Deny from allnon darà 404 ma 403. Puoi ancora accedere a file / cartelle usando PHP / Perl ecc. ma non usando una richiesta web. Puoi aprire una nuova domanda se non ha risposto alla tua domanda.
anubhava,

52

Puoi anche negare l'accesso a una cartella usando RedirectMatch

Aggiungi la seguente riga a htaccess

RedirectMatch 403 ^/folder/?$

Ciò restituirà un 403 forbiddenerrore per la cartella, ovvero: http://example.com/folder/ma blocca l'accesso a file e cartelle all'interno di quella cartella, se si desidera bloccare tutto all'interno della cartella, modificare semplicemente il modello regex in ^/folder/.*$.

Un'altra opzione è mod-rewrite Se url-rewrting-moduleè abilitato puoi usare qualcosa come il seguente in root/.htaccss:

RewriteEngine on

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

Ciò mappare internamente la richiesta di folderalla forbiddenpagina di errore.


1
Con Apache 2.22 la soluzione migliore è la prima: RedirectMatch .....
John,

6
Preferisco di gran lunga questa risposta, piuttosto che creare più .htaccessfile in ogni directory per cui ho bisogno di negare l'accesso.
DanMad,

40

In un .htaccessfile è necessario utilizzare

Deny from  all

Inseriscilo site/includes/.htaccessper renderlo specifico alla includesdirectory

Se desideri semplicemente impedire un elenco di file di directory che puoi utilizzare

Options -Indexes 

2
Questo è ricorsivo?
Abdillah,

@Abdillah Sì, lo è
Oliver M Grech,

18

Imposteremo la directory in modo che sia molto sicura, negando l'accesso a tutti i tipi di file. Di seguito è riportato il codice che si desidera inserire nel file .htaccess.

Order Allow,Deny 
Deny from all 

Poiché ora abbiamo impostato la sicurezza, ora vogliamo consentire l'accesso ai tipi di file desiderati. Per fare ciò, aggiungi il codice seguente al file .htaccess sotto il codice di sicurezza che hai appena inserito.

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

il tuo .htaccessfile finale sarà simile

Order Allow,Deny 
Deny from all 

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

Origine da Consenti accesso a tipi di file specifici in una directory protetta


Questa risposta mi ha fatto risparmiare molto mal di testa. Funziona come un fascino.
Ci provo tanto, ma piango più duramente il

9

È possibile creare un file .htaccess per la cartella, con cui dovrebbe essere negato l'accesso

Deny from  all

oppure puoi reindirizzare a una pagina 404 personalizzata

Redirect /includes/ 404.html

6

Basta inserire .htaccess nella cartella che si desidera limitare

## 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: fonti MantisBT .


4

Puoi anche metterlo IndexIgnore * nel tuo file .htaccess di root per disabilitare la lista dei file di tutte le directory del tuo sito web incluso il sub-dir


6
Questo non disabilita la lista dei file, ma dice all'autoindexer di ignorare tutti i file durante la costruzione dell'indice. Per disabilitare la lista dei file, useresti Options -Indexes.
Vladimir Kornea,

3

La creazione di index.php, index.html, index.htm non è sicura. Perché, chiunque può accedere ai tuoi file all'interno della directory specificata indovinando il nome dei file. Ad esempio: http://yoursite.com/includes/file.dat Quindi, il metodo consigliato consiste nel creare un file .htaccess per negare tutti i visitatori;). Divertiti !!


2

Puoi farlo in modo dinamico in questo modo:

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

0

Per alcuni motivi che non ho capito, la creazione di cartella / .htaccess e l'aggiunta di Nega da tutti non hanno funzionato per me. Non so perché, mi è sembrato semplice ma non ha funzionato, aggiungendo invece RedirectMatch 403 ^ / folder /.*$ alla radice htaccess ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.