Ezen az oldalon, közérthető módon igyekszünk bemutatni néhány egyszerű, de hatékony módszert weboldalaink védelme érdekében!

Amennyiben az Ön weblapja valamilyen ingyenes, fizetős, vagy bérelt 'webmotort' (WordPress, Joomla, Drupal, vBulletin, OsCommerce, e107, IPBoard, MyBB, PhPBB, PhP-Fusion, PhP-Nuke, Typo3…) használ, úgy a legjobb biztonsági megoldás, ha mindig a legfrissebb verzióval rendelkezik. Kérjük, rendszeresen frissítse weblapja motorját!

A dinamikus weboldalak elérhetőségének (URL) általános képlete:

http://www.domain.hu/fájlnév.kiterjesztés?paraméter1=érték1&paraméter2=érték2…

Az elérhetőségi sor részei:

http:// – az internet szolgáltatás elérési útja
www.domain.hu – a weblapunk elérési címe
/ – a weboldal elérési útjának elválasztó karaktere (alkönyvtár)
fájlnév.kiterjesztés – ebben a fájlban vannak azok az utasítások, melyek értelmezik és feldolgozzák a paramétereket, majd egy új weboldalt készítenek belőle, amit visszaküldenek a weboldal látogatójának
? – jelölő karakter, ez után jönnek az elküldeni kívánt paraméterek
paraméter1=érték1 – az elküldeni kívánt első paraméter neve és értéke
& – jelölő karakter, paraméterek felsorolása közti ’és’ helyettesíti
paraméter2=érték2 – az elküldeni kívánt második paraméter neve és értéke…

Egy weboldalon azt, hogy éppen milyen paramétereket és azok milyen értékeit küldjük el a weboldalnak, attól függ, hogy a weboldalon mit szeretnénk látni, mit választottunk ki (mire kattintottunk rá). Keletkezhetnek még paraméterek egy regisztrációs űrlap kitöltésekor, webáruházban rendeléskor…
A weboldalunk látogatója az elérhetőség elküldésével elküldi weboldalunknak a különböző paramétereket is, melyeket ezután weboldalunk értelmez és feldolgoz, az eredményt pedig egy aktualizált weboldal formájában visszaküldi megtekintésre a weboldal látogatójának. (Megjegyzés: Természetesen ezen paraméterek elküldésének nemcsak ez az egyetlen módja! Történhet cookie-val, htlm-head-ben…) A különböző paraméterekkel és azok különböző értékeivel a  weboldal más-más oldalt tud generálni, így lesz weboldalunk dinamikus, azaz paraméterekkel vezérelt állandóan változó. A hackerek is ismerik ezen paraméterek fontosságát, így váltak ezek a leggyakoribb támadási célponttá. A hackerek a paraméterek értékeihez próbálnak különböző értékeket, illetve speciális adatbázis, szerver (hálózati) utasításokat hozzáírni, így kényszeríteni weboldalunkat az elvárt paraméterek feldolgozása mellett, az általuk kívánt más értékek, parancsok feldolgozására is. Weboldalunk ezzel az ’extra’ munkával olyan adatokat, fájlokat is kiadhat a hackernek, melyeket mi nem szeretnénk (személyes felhasználói adatok, adatbázis hozzáférési adatok,…).
1. Leggyakoribb eset: Weboldalunk ezen paraméter(ek) felhasználásával adatbázisunkban különféle adatbázis műveleteket végez el (adatlekérdezés – select; újadat felvitel – insert; adatmódosítás – update, replace; adattörlés – delete), melyek eredményeivel aztán egy aktualizált weboldalt generál, amit megtekintésre visszaküld weboldalunk látogatójának. A hacker a paraméterek módosításával további adatbázis műveleteket próbál végrehajtatni weboldalunkkal.
Védelmi megoldás: A paraméterek szűrése, az oda nem illő, speciális karakterek eltávolítása:
Ehhez használható utasítások:

htmlspecialchars($_GET['paraméter1']); vagy htmlspecialchars($_POST['paraméter1']);
mysql_real_escape_string($_GET['paraméter1']); vagy mysql_real_escape_string($_POST['paraméter1']);
htmlentities($_GET['paraméter1']); vagy htmlentities($_POST['paraméter1']);

2. Másik gyakori eset: Amikor weboldalunk a paramétereket nem adatbázis műveletek elvégzésére használja fel, hanem ezen paraméterek segítségével elérési útvonalat állít össze. Ezen elérési útvonalak segítségével a weboldalon tárolt különböző fájlokat, dokumentumokat, képeket, zenét, … tudja elküldeni a weboldal látogatójának, vagy ezen fájlokat összefűzi egy új weboldallá, amit elküld  a weboldal látogatójának. A következő parancsoknál használhatja weboldalunk ezt az esetet: include(); include_once(); require(); require_once(); file(); fgets(); file_get_contents(); readfile();
Védelmi megoldás: A paraméterek szűrése, az oda nem illő, speciális karakterek eltávolítása.
Ehhez használható utasítások:

urlencode$_GET['paraméter1']); – Figyelem: a 'realpath();' utasítást ne használjuk, mert ott nem tűnik el a beszúrt .. és /
str_replace(array('..', '/'), '', $_GET['paraméter1']);
preg_match('/%|\./',$_GET['paraméter1'],'//');

vagy összetett feltételt vizsgáló eljárásban:

if (isset($_GET['paraméter1']))
  { switch($_GET['paraméter1'])
    { case "érték1":
           include("fájl1.php");
      case "érték2":
          include("fájl2.php");
      …
      default:
          include("fájlx.php");
    }
  }
else
{
    include("hibafájl.php");
}

3. Gyakori még: Weboldalunk az elküldött paramétereket egyfajta speciális szerver(hálózati) parancsok paramétereiként használja fel, melyek végrehajtása után, ezek eredményét küldi el a weboldal látogatójának.
Ilyen szerver parancsok lehetnek: apache_child_terminate, c99_buff_prepare, c99_sess_put, curl, curl_exec, dl, escapeshellarg, escapeshellcmd, exec, fpassthru, fsockopen, ini_alter, leak, myshellexec, parse_ini_file, passthru, pcntl_exec, pfsockopen, phpinfo, popen, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, readfile, shell_exec, show_source, symlink, system…
Védelmi megoldás: Amennyiben weboldalunk nem használ ilyen speciális szerver(hálózati) parancsokat, akkor szerver oldalon a ’php.ini’ fájlban használatukat tiltsuk le. Ha mégis szükség lenne ezekre a parancsokra, úgy a fentebb már részletezett paraméterek szűrésével tudunk hatékonyan védekezni a támadások ellen.

Reméljük segíteni tudtunk weblapja biztonságosabbá tételében!

rendszerinformatikus csapatunk!