PHP – Proteggere una cartella o un file del sito dalla lettura

Può capitare, nel nostro sito, di avere una cartella dove sono contenuti file mp3 o documenti che dovrebbero essere accessibili da una ristretta cerchia di persone. Potete naturalmente nascondere il link che punta a quel file, in modo che solo gli utenti dotati di password possano vederlo e raggiungerlo; ma una volta scoperto il nome e il percorso del file, chiunque potrebbe raggiungerlo scrivendo semplicemente la path nella barra degli indirizzi del browser.

Lo script che vi vado a presentare elimina questo problema alla fonte.
Riassumendo: a priori impediremo a chiunque l’accesso alla cartella (che non sarà accessibile scrivendo il suo percorso sul browser). Tramite uno script in php, faremo in modo che solo gli utenti dotati di password possano accedervi.

Usare l’htaccess per negare l’accesso a una cartella

Iniziamo con il proteggere la cartella.
Quello che dovete fare è creare un file txt e inserirvi all’interno queste direttive:

1
2
3
4
5
<Files ~ ".pdf">
Order allow,deny
Deny from all
Satisfy All
</Files>

Rinominate poi il file come .htaccess (senza estensioni né altro). Si tratta di un file particolare che il server si premurerà di leggere e di interpretare. Questo file deve essere posto all’interno della cartella da proteggere.

Vediamolo un attimo nel dettaglio. Le direttive qui sopra sono rivolte ai soli file con estensione pdf. Nel caso abbiate immagini dovrà essere sostituito, per esempio, con jpg. Per estendere la funzionalità a qualsiasi file presente nella cartella, dobbiamo cambiare la prima riga in questo modo:

1
<Files ~ ".+">

La direttiva deny from all impedisce a chiunque di accedere ai file della cartella con l’estensione scelta.

Permettere l’accesso alla cartella soltanto a chi è provvisto di password

Adesso creiamo un file accesso.php, anch’esso all’interno della cartella da proteggere, e riempiamolo con queste righe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(isset($_SESSION['password'])){

     $nome_file="prova.pdf";
     $dimensione_file="249kb";
     $percorso_assoluto="";

     header("Content-Type: application; name=".$nome_file);
     header("Content-Transfer-Encoding: binary");
     header("Content-Length: ".$dimensione_file);
     header("Content-Disposition: inline; filename=".$nome_file);
     header("Expires: 0");
     header("Cache-Control: no-cache, must-revalidate");
     header("Cache-Control: private");
     header("Pragma: public");

     readfile($percorso_assoluto.$nome_file);

}

Il file accesso.php permette di oltrepassare la protezione dell’htaccess che abbiamo creato in precedenza.
Proteggerlo da accessi esterni è molto semplice: basta inserire una condizione che controlli il possesso o meno dei requisiti. Se l’utente che accede a questo file si è loggato (e quindi la variabile $_SESSION["password"] è definita), potrà avviare lo script e scaricare il file prova.pdf.

Chiaramente il nome del file può essere reso dinamico. Ci basta, per esempio, far passare il suo nome come variabile $_GET.

Un’annotazione: l’header riguardante la dimensione dei file (Content-Lenght) non è obbligatorio, serve solo per maggiore sicurezza e potete quindi ometterlo con le dovute modifiche.

Etichette:,
Ultimi Commenti
  1. Demetrio
  2. saymon
  3. Antonio

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *