Form ellenőrzés: mennyire biztonságos?
Sziasztok!
Elkezdtem megírni egy függvényt, ami a form-mal elküldött adatokat ellenőrzi. Még csak az elején vagyok, azonban rögtön kérdeznék, mert nem akarok tévútra menni. Szóval, csak annyi lenne, hogy az alábbi kódrészlet biztonságos vagy sem azért, mert globalis-sá teszek változókat.
■ Elkezdtem megírni egy függvényt, ami a form-mal elküldött adatokat ellenőrzi. Még csak az elején vagyok, azonban rögtön kérdeznék, mert nem akarok tévútra menni. Szóval, csak annyi lenne, hogy az alábbi kódrészlet biztonságos vagy sem azért, mert globalis-sá teszek változókat.
<?php
function regdata_check($_POST) {
$hossz = strlen($_POST[username]);
global $error, $alt_error, $user_error;
$alt_error = "Kitöltendő adat.";
if($_POST[username] == '' || strlen($_POST[username]) < 4) {
$user_error = "Túl rövid nevet választottál.";
$error = 1;
}
}
És ha nincs hiba?
Nem értem, hogy ennek mi a lényege. Egyébként meg az $error-nak nincs default értéke. Egyáltalán, mi értelme van a függvénynek, ha nagyrészt úgyis csak globális változókkal operálsz?
Egyébként ez meg: regdata_check($_POST) mit akar tenni?
Sztem sürgősen tedd rendbe a függvényekről alkotott fogalmaidat.
:)
Túlbonyolítottad.
Miért használsz globális változókat hibaellenőrzésre? A megoldásoddal ráadásul egyszerre csak egy hibát tudsz tárolni, és nem biztos, hogy a hibásan kitöltött formnál jó lépésenként reklamálni.
Javaslom, hogy a regdata_check függvényen belül hozz létre egy tömböt, és ha valami problémát találsz a form adatoknál, egyszerűen csak ebbe a tömbbe gyűjtsd a hibaüzeneteket és az ezekkel kapcsolatos adatokat (pl. melyik form elemnél volt gond), aztán az így összeállított tömbbel térhet vissza a függvény.
Ha a visszatérő tömb üres, tudod, hogy nem találtál hibát az ellenőrző kóddal. Ha nem üres, akkor könnyen ki tudod listázni az összes megtalált hibát.
Gondoltam, hogy ez igy nem teljesen tiszta
Amúgy, még ha hülyeséget is írtam, az első függvény működik... :) De nemcsak az a lényeg, hogy működjön, hanem szeretném úgy megtanulni a dolgokat, ahogy az helyes!
Az ellenörző függvény valahogy így néz ki most (szintén működik):
Nem szerencsés a global használata
$_POST
-ot nem kell átadnod paraméterként, mert szuperglobális változó. Amikor$_POST
kulcsaira hivatkozol, használj idézőjelet körülöttük. A$_POST[username]
ausername
konstanst keresné kulcsként, míg a$_POST['username']
ausername
nevű kulcshoz tartozó értéket keresi. Globalozás helyett javasolt inkább szerintem visszatérési értékek megadása, a szöveges hibaüzenetet pedig a függvényen kívül megadni.Vázlatos példa:
Köszönöm
Ez már kicsit szimpatikusabb, mint az én megoldásom.
Dolgozom rajta! :)
a feltétel nem az igazi
a Te függvényeddel, ha nincs $_POST['username'], akkor az isset(...) nem teljesül, így nem ad vissza hamisat:
OR kapcsolat kell
Egyetlen hibaellenörző függvény
Tehát van pl. egy regisztrációs form, ahol bekérek mondjuk 4 adatot:
Amikor ezek beérkeznek a felhasználótól, akkor ráengedném a függvényt, ami megvizsgálja őket szépen sorban. Igaz itt akad el a gondolatmenetem egy csöppet, hiszen mondjuk a felhasználónévnél szeretném megnézetni azt, hogy:
Míg mondjuk az e-mail címnél csak azt nézném meg, hogy megfelelő a megadott cím formátuma.
Minden vizsgálandó változóra kéne írnom egy ilyen függvényt? Vagy pedig meg lehet ezt oldani sokkal egyszerűbben is?
Kiegészítés
Valamint azt is érdemes megnézni hogy az adott e-mail címmel regisztáltak-e már.
meg lehet egyszerubben
ez is egy jó megoldás
A legjobb, ha sok adatot ellenőrzöl, h írsz rá egy burkolóosztályt,ami egyrészt ugye könnyen bővíthető, másrészt úgyis mindig szükséged lesz hasonlóra. Én valami hasonlót használok, a php 5-ben sokkal szebbre is meg lehetne írni (kivételek, konstruktor), de hát általában én csak php4.x-el találkozom.
Függvény probléma
próbáld meg ezt
Szerintem nézz körül, biztos jól hívtad-e meg az osztályt (nem maradt ki a konstruktro, ami sajnos csak php5-től lehet automatikus), v. valamit nem írtál-e el. Megnézheted, h a fv eljut-e egyáltalán ebbe az ágba. Ha nem, akkor máshol van a hiba:
BL
Így tökéletes
Jaj bocs
ez nem lesz jó:
return false;
$this->error_numbers++;
ilyenkor ugyanis a fv. már "visszatért" false-al, tehát ami utána van, végre sem hajtódik.
ÍGy működni fog, csak én sem figyeltem:)
$this->error_numbers++;
return false;
üdv
BL