negare l'accesso diretto a una cartella e file tramite htaccess


134

Ecco lo scenario:

  • C'è un index.phpfile nella cartella principale
  • sono inclusi alcuni file index.phpche si trovano nella includescartella.
  • 1 altro file ( submit.php) si trova nella cartella principale per l'azione di invio modulo.

Voglio limitare l'accesso diretto dell'utente ai file nella includescartella tramite htaccess. anche per submit.php. Ma include funzionerà per il index.phpfile. Ad esempio, se l'utente digita www.domain.com/includes/somepage.php, lo limiterà (potrebbe essere reindirizzato a una pagina di errore).

Risposte:


266

Vorrei solo spostare la includescartella dal web-root, ma se si desidera bloccare l'accesso diretto all'intera includescartella, è possibile inserire un .htaccessfile in quella cartella che contiene solo:

deny from all

In questo modo non puoi aprire alcun file da quella cartella, ma puoi includerli in php senza problemi.


7
Altri file saranno in grado di fare una richiesta Ajax al file presente in quella cartella?
Chaitanya Chandurkar,

16
@ChaitanyaChandurkar No, una richiesta Ajax è una normale richiesta http che verrà rifiutata.
jeroen,

Sr b / c I nuova programmazione web. Come posso aggiungere un'eccezione per l'accesso al mio file index.php?
PhatHV,

Ho usato nega da tutto e ha limitato ogni url..non mostrava nemmeno la pagina di accesso .. :(
Aamir,

@Aamir È corretto, nessun URL in quella cartella sarà accessibile ma puoi includerli in altri file senza problemi.
jeroen

56

Questa è una mod_rewritesoluzione a base pura :

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

Questo mostrerà un errore proibito da usare se l'URI contiene /includes/o/submit.php


3
Ottimo lavoro per indirizzare il file
inviato

29

È possibile utilizzare una direttiva File e non consentire l'accesso a tutti i file, quindi riutilizzarlo per impostare i file accessibili:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

7
Non sono sicuro di chi ha pubblicato la domanda se il suo problema è stato risolto o meno, ma questa è la bellezza di SO che la risposta multipla può aiutare molti membri. Quest'ultima risposta ha risolto il mio problema. Voglio consentire ai siti di ottenere file css ma nessun accesso ai caratteri ttf o otf e boom! risolto.
Moxet Khan,

dopo questo non mi sento di accedere ai file nelle sottocartelle
Gintare Statkute,

14

1 liner soluzione mod_alias:

RedirectMatch 403 ^/folder/file.php$

Questo mostrerà un errore proibito per /folder/file.php


1
+1 - Questo in realtà è molto buono, perché nessuno può nemmeno vedere quali file esistono se si applica 404 a un'intera cartella, usando regex ^folder.
bytecode77,

9

Se ho capito bene vuoi solo negare l'accesso alla cartella include?

Un .htaccess con una direttiva 'DENY FROM ALL' inserita nella cartella include farebbe il trucco.


8

La tua Q è suddivisa in due parti, entrambe le soluzioni jeroen e anubhava funzionano per la parte I - negando l'accesso a / include. anubhava funziona anche per la parte II. Preferisco quest'ultimo perché utilizzo aDOCROOT/.htaccess comunque e questo mantiene tutto questo controllo in un unico file.

Tuttavia, quello che volevo discutere è il concetto di "negare l'accesso a submit.php". Se non vuoi usaresubmit.php allora perché farlo in DOCROOT? Ho il sospetto che la risposta qui sia che lo usi come obiettivo di azione in alcune forme e vuoi che venga lanciato solo quando il modulo viene inviato e non direttamente, ad esempio da uno spambot.

Se questo è vero, non è possibile utilizzare la parte II di Anubhava in quanto ciò causerà il fallimento del modulo. Quello che puoi fare qui è (i) con la .htaccessspunta per assicurarti che il referrer fosse la tua pagina indice:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

E (ii) nel tuo generatore di moduli index.php PHP include alcuni campi nascosti per un timestamp e una validazione. La validazione potrebbe essere, diciamo, i primi 10 caratteri di un MD5 del timestamp e alcuni segreti interni. Nell'elaborare l'invio è quindi possibile (i) convalidare che la data e l'ora coincidano e (ii) la data e l'ora siano, diciamo, entro 15 minuti dall'ora corrente.

In questo modo è possibile impedire lo spamming in quanto l'unico modo pratico in cui uno spammer potrebbe ottenere una coppia timestamp / validation valida sarebbe quello di analizzare un modulo, ma questo scrap avrà solo una durata di 15 minuti.


6

A seconda delle possibili altre opzioni impostate a un livello superiore, potrebbe essere necessario inserire quanto segue nel file .htaccess nella directory include:

Satisfy all
Order deny,allow
Deny from all

Mi sono imbattuto in questo quando la directory superiore ha definito l'autenticazione di base inclusa la riga:

Satisfy any

Ciò stava impedendo che il mio rifiuto da tutti avesse effetto perché gli utenti erano autenticati.


1

È possibile aggiungere il seguente comando al .htaccessfile

Deny from all
ErrorDocument 403 "nothing is here"

Verrà visualizzato il messaggio "Nothing is here" in caso di accesso non autorizzato.

Se si desidera reindirizzare un codice di errore a una determinata pagina, è possibile definire un comando come segue:

ErrorDocument 404 "/errors/404.html"

Reindirizzerà alla /errors/404.htmle mostrerà la pagina personalizzata non trovata.

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.