SQL injections
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
Gewijzigd op 18/11/2010 21:14:53 door Laurens ten Ham
Zoals al reeds gemeld... Magic quotes staan uit. En addslashes gebruik ik ook niet. Anders zou x' OR 'c' = 'c ook niet werken...
Iemand ?
Ik ben hier nieuwschierig naar namelijk
Gewijzigd op 18/11/2010 21:22:46 door Laurens ten Ham
Karl Karl op 18/11/2010 21:16:42:
x' OR 'c' = 'c; DROP TABLE test; string goed afsluiten met een " ??
Wat ik wil, is juist dat ik wel een sql injectie kan uitvoeren, niet voorkomen.
Maar somehow, it wont work :(
Mysql_query kan geen meerdere queries aan, wat je nu wel doet.
Aad B op 18/11/2010 21:24:03:
Je bent er nog niet met testen, je denkt er te simpel over:
x' OR 'c' = 'c; DROP TABLE test; string goed afsluiten met een " ??
x' OR 'c' = 'c; DROP TABLE test; string goed afsluiten met een " ??
Best Aad,
Zou jij mij eens kunnen vertellen wat ik precies in het input field moet typen zodat de table test verwijderd word ? Ik heb -- toegevoegd om de laatste quote te omzeilen... Maar toch, het werkt niet :(
Toevoeging op 18/11/2010 21:32:04:
Karl Karl op 18/11/2010 21:26:44:
Oh, zo zit het.
Mysql_query kan geen meerdere queries aan, wat je nu wel doet.
Mysql_query kan geen meerdere queries aan, wat je nu wel doet.
Aha! Duidelijk.... Kun je mij vertellen waarom dit soort voorbeelden dan gegeven worden op het net ? En op welke db dit is gebaseerd ? Of kan het wel, maar niet met mysql_query ?
Maar goed, mysql_query kan dus niet meerdere queries tegelijk aan, wat je nu wel doet:
SELECT blaat FROM blup WHERE hanzeflans=zus; DROP TABLE blup;
dat zijn twee queries :-)
x' OR 'c' = 'c'; DROP TABLE test; '
Leuke communicatie zo :) Wil je nog ff amtwoorden op (als je het nog niet hebt gedaan) :
Aha! Duidelijk.... Kun je mij vertellen waarom dit soort voorbeelden dan gegeven worden op het net ? En op welke db dit is gebaseerd ? Of kan het wel, maar niet met mysql_query ?
DANK JE WEL MAN! you made my day! Ik dacht al dat ik gek aan het worden was
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 ?
Toevoeging op 18/11/2010 21:36:47:
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?
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 mysqli.multi-query.
Het liefste haal je met sql injections data op (met uitjes).
Hetzelfde in PHPmyAdmin, werkt ook prima. Zolang ik dus bij mysql_query blijf, is het ok... Heel duidelijk allemaal! Dank jullie wel!
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!
Gewoon mysql_real_escape_string, of prepared statements, of typcaste naar int / floot w/e