Toch zou ik $_GET['id'] ff met is_numeric checken, in case ofquote:Op donderdag 15 februari 2007 19:39 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string
En $id hoeft waarschijnlijk niet in tussen enkele quotes, want zal een integer bevatten en je variabelen buiten quotes plaatsen
[ code verwijderd ]
explode() en dan array_flip()? En anders even verder kijken dan je neus lang is en http://nl2.php.net/manual/en/ref.array.php eens lezenquote:Op donderdag 15 februari 2007 20:38 schreef Chandler het volgende:
Minivraag
met dit maak ik van een string een array
[ code verwijderd ]
echter krijg ik dan
[ code verwijderd ]
maar eingelijk wil ik $font['Arial'] = "Arial" etc.
Weet iemand hoe ik dat simpel kan realiseren![]()
1 2 3 4 5 | foreach ($fnt as $null => $font) { $fontArr[$font] = $font; } |
Die discussie is nu al 500 keer gevoerd en het algemene standpunt daarin is ALTIJD USER INPUT CONTROLEREN en dat standpunt blijf ik niet herhalen.quote:Op donderdag 15 februari 2007 20:39 schreef Chandler het volgende:
[..]
Toch zou ik $_GET['id'] ff met is_numeric checken, in case of
Dat heeft inderdaad geen enkel nutquote:Op donderdag 15 februari 2007 21:01 schreef Tijn het volgende:
Waarom zou je willen dat de key hetzelfde is als de value? Wat is dan nog het nut van ze beiden opslaan?
Maar aangezien die er volgens mij geen quotes omheen zet, moet je wel heel zeker weten dat het een integer is.quote:Op donderdag 15 februari 2007 21:03 schreef Swetsenegger het volgende:
Uiteraard ga je met is_numeric controleren, hoewel de grotste angel er met mysql_real_escape_STRING AL WEL UIT IS.
Waarom zou je een integer gaan behandelen als een string?quote:Op donderdag 15 februari 2007 21:03 schreef Swetsenegger het volgende:
Uiteraard ga je met is_numeric controleren, hoewel de grotste angel er met mysql_real_escape_STRING AL WEL UIT IS.
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.quote:Op donderdag 15 februari 2007 21:45 schreef slakkie het volgende:
[..]
Waarom zou je een integer gaan behandelen als een string?
Als ie de is_numeric passed betekend het toch dat je deze data kan gebruiken voor je SQL query. Al dan niet met een single quote char eromheen.
mysql_real_escape_string lijkt me voor strings alleen, niet voor een integer.
Nee, dat kan er dus niet in staan als is_numeric() true isquote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
Op zich is het ook een nadeel van mysql dat strings in een numeriek veld kunnen worden geplaatst.quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
niemand die hier nog wat zinnigs over te zeggen heeft?quote:Op dinsdag 13 februari 2007 08:50 schreef Xcalibur het volgende:
voor alle regex mensen hier: weet iemand vanaf welke Linux / PHP versie de regex ook special characters kan matchen (ė / ą / etc.). Ik had een Windows server met PHP 4.3.11 waar het werkte, maar nu ben ik over naar een Linux server met PHP 4.3.11, en daar werkt het niet
Het gaat dus om regexen als: P{M} enzo
Edit: ik krijg dus deze error: "Warning: preg_match(): Compilation failed: PCRE does not support L, l, N, P, p, U, u, or X"
Ik volg je niet echt..quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | $array = array ( 9, '9', "9", "9.9", "9,9", "hello9", "hello world", "-9.0", "+99.0", "-9", "+9", "'+9'", "9.000001", ); foreach ($array as $id) { echo "$id\n"; if (is_numeric($id) && (!is_float($id) && !is_string($id))) { echo "is_nummeric and not float and not string\n"; } if (ctype_digit($id)) { echo "Is ctype_digit\n"; } # -9.000 -9.0 -9 en zelfde voor + maar mag ook zonder ;) if (preg_match('/^[-+]?\s*d+([.,]0+)?\s*$/', $id)) { echo "Is int - regexp\n"; } echo "\n"; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | is_nummeric and not float and not string Is int - regexp 9 Is ctype_digit Is int - regexp 9 Is ctype_digit Is int - regexp 9.9 9,9 hello9 hello world -9.0 Is int - regexp +99.0 Is int - regexp -9 Is int - regexp +9 Is int - regexp '+9' 9.000001 |
Zie quote CraZaayquote:Op donderdag 15 februari 2007 21:01 schreef Tijn het volgende:
Waarom zou je willen dat de key hetzelfde is als de value? Wat is dan nog het nut van ze beiden opslaan?
Geheel fout!quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | session_start ( ); $_SESSION['SettleLand'] = 1; echo $_SESSION['SettleLand']; // 1 in dit geval if ( $_SESSION['SettleLand'] == 1 ) { $SettleLand = "Nederland" } elseif { $SettleLand = "Belgiieeuuuuh"; } echo $SettleLand; // Nederland in dit geval echo $_SESSION['SettleLand']; // is ook veranderd in Nederland en niet meer 1 !!! ?> |
Verbaasde mij ook, want dit vond ik echt wel heel strangequote:Op vrijdag 16 februari 2007 17:16 schreef splendor het volgende:
Controleer je php.ini eens of register_globals aan staat, die moet uitstaan en in php5 kun je die geloof ik niet eens meer aanzetten, dus dat zou het verklaren.
register_globals zorgt ervoor dat je een global (session is dit geval) kunt gebruiken alsof het een normaal variable is, dus hij maakt van $_SESSION['SettleLand'] autoatisch al $SettleLand, en die is inderdaad "Nederland" geworden in jou script. Overigens raar dat $_SESSION['SettleLand'] ook nederland wordt maar vooruit, zal de andere kant ook wel zo op werken.
Je gaat er maar vanuit dat je daadwerkelijk de userinput controleert. Zowel mysql als php zijn zo inconsistent als de tyfus met strings en integers, dus is 1 fuck-up voldoende om sql injection toe te staan.quote:Op donderdag 15 februari 2007 23:31 schreef slakkie het volgende:
[..]
Ik volg je niet echt..
Ik zie de gehele reden voor de mysql_real_escape_string niet. Het is een integer, geen string. En zelfs al is het een string, dan heb je die mysql_real_escape_string niet nodig. Een input van '9 moet ie er zoiezo uitfilteren en op barfen, daar hoef je niet nog eens een \'9 van te maken. Dit is immers geen int.
Ik zat ff te spelen met verschillende manier om te checken of iets een int is.
[ code verwijderd ]
[ code verwijderd ]
Zoals je kan zien, heb ik die hele mysql_real_escape_string niet nodig. Die is_numeric is mij te los qua wat ie als integer zit, ik zou hem iig daarvoor nooit gebruiken. Ik zou dus altijd met een regexp checken of het een integer is.
Wellicht dat intval() ook nog gebruikt kan worden, ik heb ermee getest, maar die vind 9.9 ook een int, en daar ben ik het niet mee eens, dat is een double/float, en valt dus buiten de boot.
quote:Op donderdag 15 februari 2007 23:11 schreef CraZaay het volgende:
[..]
Nee, dat kan er dus niet in staan als is_numeric() true is
quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
1 2 3 4 | $getValue = trim(htmlspecialchars($getValue)); return $getValue; } |
[php/mysql] SQL Injection, Maqic Quotes genoeg?quote:Op vrijdag 16 februari 2007 19:10 schreef splendor het volgende:
Is het misschien iets om voor iedereen hier een functie te schrijven die veilig met $_GET's omgaat?
Ik wil wel een begin geven door mijn voorlopige functie hier neer te zetten, kan iemand anders hem uitbreiden en er over discussiėren tot we een goeie hebben.
[ code verwijderd ]
Misschien een idee dat je aangeeft of het een int, string of beide moet/mag zijn en dat ie daar dan ook op controleert.
1 2 3 4 5 | Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 139 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 140 |
1 2 3 4 5 | Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 139 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 140 |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |