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
en als je een oplossing met toekomst wil uitproberen:
PDO met prepared statements maakt sql injection onmogelijk.
http://www.phphulp.nl/php/tutorials/8/534/
PDO met prepared statements maakt sql injection onmogelijk.
http://www.phphulp.nl/php/tutorials/8/534/
PHP Newbie heeft een fantastische link gegeven. :P
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.
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:
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 ;-)
@Chris Kortaan
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)
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)
MYSQL Injection in essentie:
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:De velden username en password worden door de bezoeker ingevuld via een formulier.
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:
Omdat de vergelijking altijd TRUE opleverd geeft ook altijd TRUE.
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:
@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:
... Alleen wellicht iets moeilijker taalgebruik.
'Bas:
@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?




