Blindare il server per non visualizzare il contenuto della cartella e dei file con .htaccess
Capita di non voler rendere pubblico il contenuto di una cartella o dei file in essa contenuta. Se sei online esistono vari modi per visualizzare il contenuto dei file presenti sul tuo sito o sul tuo server ma alcune richieste o necessità richiedono di blindare l’ accesso per non visualizzare o scaricare il contenuto.
Il modo più sicuro è quello di creare un file .htaccess da inserire all’ interno della cartella che vogliamo blindare…poche righe infatti negano l’accesso a tutti i file in essa contenuta.
<Files ~ “.+”>
Order allow,deny
Deny from all
Satisfy All
</Files>
Copiate il testo e salvate con il nome del file .htaccess
Da adesso in poi non si visualizzerà più il contenuto della cartella e dei suoi file all’interno ma saranno visibili e modificabili attraverso FTP.
In seguito possiamo, grazie a php, visualizzare il contenuto della cartella e quindi i file al suo interno con un metodo di verifica dell’utente o qualsivoglia metodo di verifica.
Ad esempio potrebbe visualizzare il contenuto un utente presente nel Database oppure un utente che ha iniziato una sessione o ancora un cookie.
Il file in php che chiameremo in questo caso visualizzocontenuto.php non deve risiedere nella cartella protetta.
Di seguito un esempio:
<?php
session_start();
if(!isset($_SESSION[‘password’])) //se la sessione non è valida indirizzo l’utente alla pagina del login
{header(“Location: index.php”);
}
else { //se esiste la sessione apro e visualizzo il file prova.jpg
$nome_file=”cartellaprotetta/prova.jpg”;
header(“Content-Type: application; name=”.$nome_file);
header(“Content-Transfer-Encoding: binary”);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($nome_file);
}
Ovviamente si potrebbero fare altri esempi e con php tutto è possibile ma ad esempio potremmo aprire il file in modo dinamico con $_GET[‘nomefile’] oppure tutti i file con un ciclo while dopo aver richiamato il contenuto sul database.