Felhasználó által bevitt adatok ellenőrzése

Sziasztok!

Azt szeretném megtudni, hogyha egy felhasználó kitölt egy
mezőt, azt PHP-ban mivel kell szűrni, ellenőrizni a mysql_real_escape_string() fg.-n kívül?

Esetleg mutatnátok példát is?

Köszönöm!

Hozzászólások

annyira nem értek hozzá, de pl. ez is érdekes lehet számodra

szerk.: vagy ez.

szerk2.: meg találtam neked egy ilyen hosszú, angol nyelvű cikket a témában.

Tegyünk itt azért egy kis rendet. A basename-nek nem sok köze van a szűréshez, kivéve ha fájlokat kell kezelni, de arra is vannak jobb módszerek. A htmlentities() függvényt főként megjelenítéskor használják. A mysql_real_escape_string()-et pedig tároláskor. Ha csak szűrni akarod az adatokat, akkor a filter_var() függvényt használd, nagyon sok lehetőség van.

Szia!

Használsz valamilyen framework-öt a fejlesztéshez? Ha még nem és nem valami nagyon pici programot/site-ot fejlesztesz én azt javaslom, hogy ismerkedj meg valamelyikkel, nagyon sokat tudnak segíteni az ilyen egyszerű feladatok elvégzésében.

Ott van pl. a Zend. Ingyé' van és tudja, amire szükséged lehet.
Gugli a "zend framework input validation"-re ezt dobja: http://framework.zend.com/manual/en/zend.validate.html

Egy csomó ellenőrzést elvégezhetsz javascripttel is. Persze, nem derült ki, hogy mit akarsz ellenőrizni/szűrni, milyen környezetben...mert weben a javascript sok embernek ki van kapcsolva érthető módon, ott ez nem jó, de intra megoldásnál lehet jó.

Proxyt nem, de kártékony input adatot megadhat a felhasználó. Egyrészt kárt okozhat a cégnek (pl. törli az adatbázist vagy a fájlokat), aminek a visszaállítása (ha egyáltalán van mentés) eltarthat egy jó ideig attól függően, hogy van-e előre kidolgozott visszaállítási terv vagy nincs. Másrészt adatot is szerezhet az illető, amivel később visszaélhet.

JavaScriptet inkább használhatóság szempontjából alkalmazzák szűrésre, mivel így nem kell kérést küldeni a szervernek, illetve újratölteni az oldalt, hanem a felhasználóval egyből lehet tudatni, hogy valami rossz (pl. piros keret az inputra). Viszont PHP ellenőrzésre mindenképp szükség van, akár van JavaScript szűrés, akár nincs.

Nem értünk egyet: a kliensről ha csak lehet, hülyeség ne legyen elküldve. Természetesen a szerver a felküldött adatokat ugyanúgy, vagy akár szigorúbban is(!) ellenőrizze, mint ahogy azt a js-ből a kliensen, hiszen telnettel is lehet adatot küldeni :) - de az, amit megkap, az legyen előszűrve (munkamegosztás rulz)

Érdemes tartalomra is szűrni (például dátumot vagy email címet tartalmazó mezőnél), erre a reguláris kifejezéseket tudod használni.

+1 mindig is mondtam, hogy nem az az érdekes, hogy POST vagy GET, hanem hogy mi van benne...
Egyébként ökölszabály:
1. ahol felhasználod a stringet, mindig legyen védett. Pl rakd "" közé
2. ha előfordul a stringben az a karakter, amivel véded, azt encodeolni kell.

Elégséges lehet például az addslashes is, környezettől függ. A legtöbb sql sentence parser tokenizál, így a " karakter után mindent egy literálnak vesz a lezáró "-ig. Ha nem tud a user érvényes lezáró karaktert beszúrni (mivel encodeoltad), akkor nem tud kitörni és örülsz.

preg_match input szűrésre jó lesz.
--
unix -- több, mint kód. filozófia.
Life is feudal

érdemes odafigyelni a különböző karakterkódolásokra is!
--
unix -- több, mint kód. filozófia.
Life is feudal

A kliens oldali ellenőrzés és szűrés nem teljes, önmagában nem elegendő! A felhasználó által megadott adatokban SOHA nem szabad megbízni, mivel számos támadásra adhatsz lehetőséget. A PHP 5 ben sok lehetőség van az adatok szűrésére:

Pl:

filter_var()

filter_input()

filter_input_array()

filter_var_array()

strip_tags()

htmlspecialchars()

htmlentities()

stripslashes()

escapeshellcmd()

escapeshellarg()

+ *_real_escape_string, ahol * a használt adatbázis neve, ezeket a kapcsolat létrehozása után tudod használni.

illetve a reguláris kifejezések használata (http://hu.php.net/manual/en/function.preg-filter.php).

---
"the further you go outside, the further you go inside"