Webprogramozás arr PHP info Biztonságos űrlap készítés.
(#1) iNferNaL 2011.06.13. 15:09

iNferNaL
iNferNaL
Kezdő

Gondolom már sokatokkal előfordult az a szituáció, hogy olyan dolgokat írtak be az űrlapotokba, ami később megjelenítéskor tönkre vágta az oldalt. Ez manapság nem újdonság, mivel elég sokan gondolják azt, hogy megírták a tökéletes scriptet, de akkor szembesülnek a problémával, amikor már nagy a baj. Na most ezen próbálok én nektek segíteni.

A felhasználót mindig vegyük úgy, hogy nem tud mindent, szóval bármikor csinálhat nekünk bármi problémát, amikor űrlapot tölt ki. Legfontosabb az, hogy " jeleket ne tudjanak úgy használni, hogy vele felborítsák a programunkat.

" jel mellett még az SQL INJECT is nagy prblémákat tud okozni nekünk, amit ugye nem szeretnénk. Ha nincs levédve az űrlapunk, akkor könnyen előfordulhat, hogy valaki még jogokat is kitud osztani magának (Admin, Moderátor, akármi). Vegyünk egy példát. Van egy sql feltöltő scriptünk.

1
$sql = "INSERT INTO uzenet (nick, szoveg, lathato, datum ) VALUES ( $nick, $szoveg, 0, $datum);


Ugye bár ez azt jelenti, hogy egy nicket, szöveget, látható, datumot adunk át. Nézzük meg jobban, nick egyértelműen a nick nevünket küldi el, a szöveg a szövegünket, és a latható pedig, ha 0 akkor nem fog látszani az oldalon, ha 1 akkor igen (Ez moderátori döntés), dátum meg egyértelmű.

Na most van egy felhasználónk aki kitölti az űrlapunkat, mondjuk így:

Szöveg mező: 'bla bla', '1') - -

Na ezzel megcsinálták a cselt ellenünk. Ugyanis a szöveg mező rendesen felkerül, a 0 helyet 1-est küld el, és lezárta az SQL-t, és a - - jellel pedig megjegyzést kezdet meg, így már is SQL INJECT áldozata lettünk. Na ez ellen a PHP-nak vannak jó függvényei, na akkor nézzük is a lényeget. :)

trim() - Ezzel tudjuk a szó előtti és utáni szóközöket eltávolítani.
mysql_real_escape_string - ez a függvény minden veszélyes karaktert levéd, így már semmiképpen se tudnak kárt tenni bennünk.

Ezt a két függvényt érdemes együtt használni, így tuti a biztonság. :)

Egy példa az előzőekhez visszavezetve.

1
2
3
4
$nick = mysql_real_escape_string(trim($nick));
$szoveg = mysql_real_escape_string(trim($szoveg));
 
$sql = INSERT INTO uzenet (nick, szoveg, lathato, datum) VALUES ( '$nick', '$szoveg', '0', NOW());


(NOW() függvény egy SQL függvény, ami a jelenlegi pontos szerveridőt küldi el az adatbázisnak)

Remélem ezzel segítettem nektek, hogy mostantól tudjátok, hogyan is kelljen levédeni az űrlapokat. :) kep


Utoljára szerkesztette: iNferNaL 2011.06.13. 15:13