Hallo Allemaal,

Ik lees hele pagina's vol over SQL injections... Nu komt het.

Ik heb op localhost ff snel een form gemaakt met 1 veld, en deze input word gebruikt in een where clausule....

ik heb het volgende uitstaan in php.ini.
magic_quotes_gpc
magic_quotes_runtime

Dit zou naar mijn weten moeten voorkomen dat er backslashes worden geplaatst voor mijn quotes....

Dit trucje werkt in het input field....
x' OR 1=1#

en deze ook:
x' OR 'c' = 'c

Maar deze (Wat volgens het hele internet beweerd word dat zou moeten werken.....) werkt niet:
x' OR 'c' = 'c; DROP TABLE test; --

Bij bovenstaand krijg ik de welbekende error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE test; --'' at line 1

Er worden absoluut geen slashes toegevoegd waar dan ook.....

Ik heb MySQL 5.1

Nu word ik toch heel nieuwschierig waarom dit niet werkt....

Iemand een duidelijk uitleg... Ik heb ALLE tuts gelezen.....

Cheers
Kun je mij vertellen waarom dit soort voorbeelden dan gegeven worden op het net ?

Gebruikt iedereen mysql_query()? Daar zal het antwoord zich wel bevinden. Verder is het een voorbeeld dat gemakkelijk begrijpbaar is en de noodzaak duidelijk maakt om sql-injection te voorkomen.
- SanThe - op 18/11/2010 21:33:24

x' OR 'c' = 'c'; DROP TABLE test; '


Tried that :( Doesnt work. mysql_query kan dit gewoon niet ?


[size=xsmall]Toevoeging op 18/11/2010 21:36:47:[/size]

Ik vind het geweldig dat iedereen zo behulpzaam is! Echt! Maar er gaan nu dingen door elkaar lopen..

Wat ik wil, kan dat met mysql_query() ? Ja/Nee waarom?
We zijn beide te snel :-).

Voor zover ik weet kan het niet met mysql_* functies. Op welke sql engines / scripttalen het mogelijk is weet ik eigenlijk niet zo. Misschien met SQL server van Microsoft.
Of als er op een andere manier de db benaderd wordt. Als je gewoon een mysql console hebt kan je wel weer meerdere queries te gelijk gebruiken.
Ook moet je dus oppassen met [php]mysqli.multi-query[/php].
Het liefste haal je met sql injections data op (met uitjes).
Idd! shell command werkt prima mysql> query1 ; query 2;
Hetzelfde in PHPmyAdmin, werkt ook prima. Zolang ik dus bij mysql_query blijf, is het ok... Heel duidelijk allemaal! Dank jullie wel!
Wel beveiligen!
Overigs is het zo (geloof ik) dat phpmyadmin je query helemaal ontleed... (En een limit toevoegt)
Sowieso gebruik ik standaard addslashes of mysql_real_escape_string. Ik wou dit gewoon eens goed onderzoeken. En dat heb ik dan ook gedaan :) Dank!
Geen addslashes gebruiken. Dat is geen beveiliging, dat is verneuken van data.
Gewoon mysql_real_escape_string, of prepared statements, of typcaste naar int / floot w/e

Reageren