sql injection
weet heeft er een link met een makkelijke uitleg over sql injection??
SQL Injection geeft geloof ik toch wel genoeg links. Kies zelf de makkelijkste ;-).
@justin maar ik snap helemaal niks van die uitleg op wikipedia
PDO met prepared statements maakt sql injection onmogelijk.
http://www.phphulp.nl/php/tutorials/8/534/
Vergeet trouwens ook niet de $_GET() in een escape string te zetten he.
mysql_real_escape_string($_POST['mijnnaam']);
mysql_real_escape_string($_GET['mijnnaam']);
Bij GET kunnen ze ook injection toepassen.
SXForce schreef op 01.02.2009 23:17:
PHP Newbie heeft een fantastische link gegeven. :P
Geschreven door Blanche en hier en daar aangevuld door mij :-)
Gelukkig kun je zelf ook je Class schrijven en hoef je PDO dan niet te gebruiken ;-)
En het voordeel daarvan is? PDO werkt prima en is helemaal niet lastig. Ik gebruik het ondertussen zelf ook al voor een aantal projectjes. Iets aanpassen/ uitbreiden en ik geef een query op en de LIMIT (voor pagina-nummering is evt. toe te voegen)
Verder de waarden die mee moeten kan je laten bepalen door mee te geven in een array, en voilla -> Heel simpel, doeltreffend en je hoeft helemaal niet PDO opnieuw uit te vinden.
Maar het ging om SQL injection te voorkomen, het minste wat je dan kan doen is de mysql_real_escape_string() gebruiken. Daarnaast moet je gewoon zorgen dat je bij alle invoer (waar mogelijk) controleert op geldige waarden, waar je een getal verwacht controleren of het ook een getal is (zo niet, dan gooi je die waarde gewoon leeg, zodat je hem niet kan gebruiken) enzovoorts. Zo voorkom je zelfs zonder de escape functie al een heleboel problemen met injectie, en kan je gebruikers ook toepasselijke fouten teruggeven. (lees: aangeven welke invoer niet goed is en waarom niet)
In PHP 'bouw' je een string op met een SQL commando die je wil laten uitvoeren op je mysql database. Deze string moet soms waarden bevatten die door de gebruiker zijn opgegeven. In feite helpt de input van de gebruiker dus mee met het opbouwen van je SQL commando.
'hackers' proberen de opbouw van dit SQL commando bewust te manipuleren.. dat noemen we mysql injection.
Stel, je hebt een query die er als volgt uitziet:
Code (php)
1
SELECT * FROM `users` WHERE `username` = 'username' AND `password` = 'password' LIMIT 1;"
De bezoeker/hacker wil heel graag inloggen als administrator, dus vult in:
username = Administrator
password = ' OR '1' = '1
De query die nu wordt opgebouwd is:
Code (php)
1
SELECT * FROM `users` WHERE `username` = 'Administrator' AND `password` = '' OR '1' = '1' LIMIT 1;"
Omdat de vergelijking altijd TRUE opleverd geeft ook altijd TRUE.
Bas schreef op 01.02.2009 19:11:
@justin maar ik snap helemaal niks van die uitleg op wikipedia
Is bijna dezelfde uitleg als de link die PHPnewbie gaf... Alleen wellicht iets moeilijker taalgebruik.
Justin schreef op 02.02.2009 11:50:
... Alleen wellicht iets moeilijker taalgebruik.
Bas schreef op 01.02.2009 19:11:
@justin maar ik snap helemaal niks van die uitleg op wikipedia
... Alleen wellicht iets moeilijker taalgebruik.
Wie weet is dat wel de reden dat hij het niet snapt?