Evitare l'accesso diretto ad un file

Quando si realizza uno script PHP che prevede l’inclusione di diversi files è conveniente evitare che questi possano essere richiamati direttamente dall’utente. Il modo più semplice per ottenere tale risultato consiste nel posizionare tutti gli script da includere al di fuori della root del server web, cioè esternamente alla sua cartella principale. E se ciò non fosse possibile?

Non tutti i fornitori di hosting infatti permettono di gestire files al di fuori della root. In questi casi è possibile affidare al PHP il compito di controllare tali accessi diretti, semplicemente aggiungendo il seguente codice in testa a tutti gli script da proteggere:

if(__FILE__ == $_SERVER['SCRIPT_FILENAME'])
{
   exit('Accesso non consentito') ;
}

Il funzionamento è molto semplice: la variabile $_SERVER[‘SCRIPT_FILENAME’] contiene il nome dello script richiesto dall’utente mentre la costante __FILE__ è impostata automaticamente dal PHP con il nome del file corrente. Se questi due valori coincidono significa che l’utente sta cercando di accedere direttamente al file corrente e pertanto l’esecuzione dello script viene interrotta.

Per chiarire ulteriormente questa tecnica consideriamo il seguente esempio: un file dal nome index.php include lo script config.php. Per evitare che quest’ultimo possa essere chiamato direttamente da un utente procediamo nel seguente modo:

- index.php

<?php
// includiamo il file di configurazione
include('config.php');

// il resto del file...
?>

- config.php

<?php
// evitiamo l'inclusione diretta
if(__FILE__ == $_SERVER['SCRIPT_FILENAME'])
{
   exit('Accesso non consentito') ;
}

// il resto del file...
?>

Nel caso in cui si acceda direttamente al file config.php il valore di __FILE__ e di $_SERVER[‘SCRIPT_FILENAME’] coincideranno e pertanto l’esecuzione verrà terminata.