ugrás a tartalomhoz

Univerzális string szűrő

stan · 2009. Szep. 10. (Cs), 11.24
Egy olyan php kódot szeretnék írni, ami kiszűr minden nem kívánatos karaktert a GET, POST, COOKIE, REQUEST elemekből, de úgy hogy ne kelljen minden egyes mysql_query-be beletennem a megfelelő szűrőket. Szerintem a legjobb megoldás, ha lenne egy univerzális szűrőm, amit betennék a front controller legelejére (index.php), így minden kiszűrne még mielőtt bármi használhatná az elküldött stringeket.

A http://us2.php.net/manual/en/function.mysql-real-escape-string.php oldalon találtam egy ígéretes kódot, az egyik:
$_GET = array_map('trim', $_GET); 
$_POST = array_map('trim', $_POST); 
$_COOKIE = array_map('trim', $_COOKIE); 
$_REQUEST = array_map('trim', $_REQUEST); 
if(get_magic_quotes_gpc()): 
    $_GET = array_map('stripslashes', $_GET); 
    $_POST = array_map('stripslashes', $_POST); 
    $_COOKIE = array_map('stripslashes', $_COOKIE); 
    $_REQUEST = array_map('stripslashes', $_REQUEST); 
endif; 
$_GET = array_map('mysql_real_escape_string', $_GET); 
$_POST = array_map('mysql_real_escape_string', $_POST); 
$_COOKIE = array_map('mysql_real_escape_string', $_COOKIE); 
$_REQUEST = array_map('mysql_real_escape_string', $_REQUEST); 
Szerintetek szükséges beletenni ezeket is: strip_tags(), htmlspecialchars(), htmlentities()?
Eelegendő védelmet nyújt ez a programkód?
 
1

rossz az elképzelés

gex · 2009. Szep. 10. (Cs), 13.12
az a baj hogy nincsenek univerzálisan rossz karakterek így nem tudsz univerzális szűrőt készíteni sem. más karakterekre/szövegrészletekre kell figyelni adatbázisba íráskor, (x)html/xml generáláskor, stb.
2

jobb az a megközelítés amikor

rrd · 2009. Szep. 10. (Cs), 16.01
jobb az a megközelítés amikor azt ellenőrzöd, hogy az input olyan-e mint amit vársz. azaz fehér listás szűrés. Ha mindenféleképpen valami általános szűrőt akarsz akkor nézd meg, hogy az egyes CMS-ek vagy keretrendszerek hogyan szűrik az inputot, de nem valószínű, hogy találsz egy általános mintát.
3

escape vs filter

gex · 2009. Szep. 10. (Cs), 16.05
azért itt most jól összemosunk két fogalmat.
4

csak amiket amúgy is kiszűrnék

stan · 2009. Szep. 10. (Cs), 20.54
Persze minden input értékét ellenőrzöm a tartalmától függően, ez nyilvánvalóan elkerülhetetlen. Én arra gondoltam, hogy azokat a karaktereket, amiket mindegyiknél kiszűrnék, azt már a legelején kiszedném, hogy ne kelljen minden helyre beírnom fölöslegesen. Gondolok itt az aposzrófra és társaira, hogy ne lehessen mysql injection-t csinálni.
5

még mindig escape vs filter

gex · 2009. Szep. 11. (P), 06.29
mondom hogy erőteljesen össze van mosva két fogalom. ha nekem az a nevem hogy o'reilly (a klasszikus példa aposztrófra) akkor igenis ezt írhassam be a név mezőbe és ne oreilly legyen belőle...

az ehhez hasonló speciális jelentéssel is bíró karaktereket nem szűrni (filter) kell, hanem kivédeni (escape) az általa okozott problémát.
6

Igazad van

stan · 2009. Szep. 11. (P), 09.02
Mostmár értem, tehát akkor nincsen univerzális szűrő. Minden felhasznált elemet külön szűrni kell, csak gondolom érdemes osztályokkal intézni ezt, hogy minél egyszerűbb legyen.