2013-02-21 8 views
5

Al momento lo faccio in questo modo:Bloccare l'accesso allo script direttamente a un file

in un unico file, consente di chiamare file_one.php, ho

define('ROOT', realpath(dirname(__FILE__))); 

require_once(ROOTPATH . '/file_two.php'); 

E in file_two.php Ho poi avere questo al top:

if (! defined('ROOT')) 
    exit; 

Quindi il contenuto di file_two.php può accedere solo se ROOT è definito, che avviene in file_one.php. Se provi ad accedere direttamente a file_two.php, non funzionerà, è giusto? Ci sono difetti in questo metodo?

+5

Un'idea ancora migliore è quella di metterlo al di fuori del webroot se possibile –

+0

Ecco come CodeIgniter sembra farlo, quindi dovrebbe essere per lo più sicuro. Anche se sono d'accordo con post sopra che se questo è un problema, è sufficiente spostarlo fuori dalla docroot –

risposta

1

Conversione commento di John Conde a una risposta:

Il modo migliore per garantire un file non è possibile accedere in un browser è mettendolo fuori dalla webroot.

È necessario disporre di una cartella denominata www o public_html o simile, che contenga i file del proprio sito Web. Bene, nella cartella che lo contiene puoi mettere una cartella includes e avere lì i tuoi file di accesso di script. In questo modo, sono completamente inaccessibili dal Web, ma gli script possono ancora arrivare a loro.

1

È esattamente come dici tu. Se qualcuno digita direttamente nel browser /../../file_two.php uscirà. Quando il file viene caricato in modo indipendente, senza includere, ROOT non è definito.

Ricorda che in PHP un file include altri e altri e praticamente finisce con un singolo file alla fine. Quindi, se la variabile di accesso diretto non è definita da qualche parte PRIMA del controllo, non consentirà l'accesso.

Problemi correlati