Ik ken het verhaal van de slashes op GET/POST/COOKIE variabelen. Door de gebruiker ingevoerde waardes mogen nooit direct in een query geplaatst worden zonder geslashte quotes. Maar wat als men nu een script als dit gebruikt, waar magic_quotes_gpc aan staat?
Is deze aanpak werkelijk veiliger voor SQL injectie dan het code fragment hierboven, of is het overbodige moeite? Kunnen NULL-bytes, tabs, newlines etc. last veroorzaken wanneer men HTTP requests tweakt?
Het gaat me hier nu alleen even om dit risico; ik begrijp dat je user input principieel zou moeten controleren op inhoud, waar mogelijk. Ik heb het hier ook niet over de weergave; ingevoerde HTML code filter ik altijd pas achteraf.
code:
Hier werden de quotes al geplaatst door PHP, en dus staan ze nog steeds in de query. Maar wat is dan de meerwaarde van de functie mysql_real_escape_string(), wat veiligheid betreft? Deze gebruik ik altijd; ik haal $_POST vars binnen met onder andere stripslashes() en plaats ze daarna met deze functie in de $sql opdracht. 1
2
3
| $sql = "INSERT INTO tabel SET veld = '".$_POST['waarde']."';"; mysql_query($sql); |
Is deze aanpak werkelijk veiliger voor SQL injectie dan het code fragment hierboven, of is het overbodige moeite? Kunnen NULL-bytes, tabs, newlines etc. last veroorzaken wanneer men HTTP requests tweakt?
Het gaat me hier nu alleen even om dit risico; ik begrijp dat je user input principieel zou moeten controleren op inhoud, waar mogelijk. Ik heb het hier ook niet over de weergave; ingevoerde HTML code filter ik altijd pas achteraf.