2011-01-06 10 views
11

Ho un file php che eredita (include) un altro file PHP. Tutti i file ereditati si trovano in una cartella denominata "include". Voglio essere in grado di limitare qualsiasi accesso diretto a questa cartella. Solo i file PHP all'interno del server possono comunicare con i file nella cartella "include". Come posso usare .htaccess per raggiungere questo obiettivo?.htaccess per limitare l'accesso alla cartella

Cordiali saluti, ho usato il seguente codice e non ha funzionato

Order deny,allow 
deny from all 

Qualsiasi aiuto sarebbe apprezzato

+0

Se questo non funziona, potrebbe essere che httpd.conf è impostato per non leggere i file .htaccess. Ad esempio: AllowOverride None Change a qualcos'altro (ad esempio AllowOverride All) e riavviare il server web. – user535673

risposta

19

Se non si ha la possibilità di spostare la realtà "comprende" la cartella al di fuori della zona di radice dei documenti, e utilizzando l'include_path (cioè non è possibile arrivare ad essa da web), quindi immettere

in una directory .htaccess in quella directory.

Tuttavia, un'alternativa consiste nell'utilizzare una direttiva DEFINES per consentire solo l'accesso a quelli inclusi nei programmi da file autorizzati specifici. Per esempio, mettere

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

nella parte superiore del file di inclusione, e poi mettere

<?php define('ACCESS_ALLOWED', 1); ?> 

nei programmi che sono autorizzati a includere tali file.

Ciò impedirà ai GET casuali di includere file per eseguirli e funzionerà per qualsiasi server Web, non solo quelli che supportano i file htaccess.

3

in includes/.htaccess:

Order deny,allow 
deny from all 
+0

Provato ma non ha funzionato –

2

si può effettivamente solo utilizzare un index.php e passare un'intestazione 404 utilizzando header():

header('HTTP/1.1 404 Not Found', 404); 

IMO, questo è migliore di un 403, poiché è come se la cartella non esistesse. Per quanto riguarda i file include, mettere questa riga sopra la prima include/require riga del file principale:

define('INCLUDED', true); 

E su ogni file nella directory includere, mettere questo in cima maggior parte.

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

Si potrebbe anche voler chiamare exit(); dopo l'intestazione, poiché la pagina potrebbe ancora essere eseguita. –

0

A seconda delle possibili altre opzioni fissati a un livello più alto, potrebbe essere necessario utilizzare:

Satisfy all 
Order deny,allow 
Deny from all 

mi sono imbattuto in questo quando la directory superiore definito l'autenticazione di base tra cui la linea:

Satisfy any 

Questo stava impedendo il mio rifiuto da parte di tutti di avere effetto perché gli utenti erano autenticati.

1

È possibile negare l'accesso diretto alla cartella utilizzando le seguenti direttive in htaccess o server.config Contex:

Mod-alias soluzione

Redirect 403 ^/folder/.+$ 

basato Ciò reindirizzare tutti i file e dirs di/cartella da 403 pagina di errore/proibito.

soluzione di base Mod-rewrite:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F] 
Problemi correlati