PHP-Script.hu
Kiemelt hirdetés:
2026. október 17. 13:10 szombat, ma Hedvig névnap van


grafika


Videóbázis


Listázás:  Idő szerint:
Webprogramozás arr PHP info Biztonságos űrlap készítés.
(#4) RimElek válasza erre: (#3) iNferNaL 2011.06.13. 23:16

RimElek
RimElek
VIP

Tudom. A now() függvényes megjegyzésem nem is egészen témába vág. Jó az sql now() is. És php date() Csak használjuk következetesen. Van, hogy nem a pontos idő számít. Hanem az eltelt idő. De az esetek többségében nem is számít melyik módszert használjuk. Mert az idők azonosak mindkét módszerrel. Csak érdekességként jegyeztem meg.


Utoljára szerkesztette: RimElek 2011.06.13. 23:17
(#3) iNferNaL válasza erre: (#2) RimElek 2011.06.13. 17:04

iNferNaL
iNferNaL
Kezdő

Köszönöm az észrevételed, és igazad is van ezekben, bár a Now() függvényt csak azért írtam bele, mert így megspórolok egy hosszabb sort, bár a date függvény se tartana sokáig. :)


Utoljára szerkesztette: iNferNaL 2011.06.13. 17:04
(#2) RimElek 2011.06.13. 15:56

RimElek
RimElek
VIP

Ez tényleg fontos dolog. Nem is olyan régen én is szereztem így admin jogot magamnak egy oldalon. Szigorúan engedéllyel garázdálkodtam :)

A leíráshoz egy kis megjegyzés: Az első sql kódnál még aposztróf sincs a változók körül. Így idézőjel sem kell az űrlapon, eleve hibás lesz. De ezt nyilván csak kifelejtetted itt a példában..

mysql_real_escape_string() jó és kell is használni, de ha a szerveren a magic_quotes_gpc = On ( PHP 5.3 óta úgy tudom, alapértelmezetten OFF ), akkor magától is escapel. Erre még rátesz a függvény. És kiolvasásnál kell használni a stripslashes-t. Okozhat problémákat. Szóval célszerű azt a függvényt úgy használni, hogy előbb a magic_quotes_gpc() értékét vizsgáljuk. Viszont a mysql_real_escape_string() a mysql_escape_string() függvényhez képest az adatbázis kódolását is figyelembe véve escapel ( ha a második paramétere meg van adva.A db kapcsolat azonosító ). Nem csak idézőjeleket. Így én a szerveren bekapcsolt magic_quotes_gpc mellett stripslashes -el törölni szoktam az escapeléseket. És csak a mysql_real_escape_string -re hagyatkozom.

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

Ehhez annyit, hogy nem küldi el az adatbázisnak. Pontosabban az adatbázisszerveren dől el az értéke. Ha a mysql szerver nem azonos a webszerverrel, és tegyük fel különböző a dátum, de bizonyos dátumokat php date() -el, másokat now() -al DB-ből adunk meg, az is összezavarhatja a programot.

Ilyen még nem fordult velem elő, csak mondom, hogy elméletben lehetséges.


Utoljára szerkesztette: RimElek 2011.06.13. 15:59
(#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
Listázás:  Idő szerint:


© 2006-2026 PHP-Script.hu, Minden jog fenntartva!
Design: Rácz Gergely, Oldalmotor: Rácz Gergely
Impresszum - Oldaltörténet - Oldalszabályzat