Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

PHP/MySQL: query veiligheid

mosymuis
3 antwoorden
  • Ik ken het verhaal van de slashes. Door de gebruiker ingevoerde strings mogen nooit direct in een query geplaatst worden zonder geslashte quotes, en $_POST variabelen zou je eerst moeten valideren op inhoud. Maar wat als men nu een script als dit gebruikt, waar "magic_quotes_gpc" aan staat?

    [code:1:becb852c98]$sql = "INSERT INTO tabel
    SET veld = '".$_POST['waarde']."';";[/code:1:becb852c98]
    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 in de $sql met mysql_real_escape_string().

    Is dit werkelijk veiliger dan het code fragment hierboven, of is het overbodige moeite? Kunnen NULL-bytes, tabs, newlines etc. werkelijk last veroorzaken wanneer men HTTP requests tweakt?
  • [quote:862d2ff26a="mosymuis"]
    [code:1:862d2ff26a]$sql = "INSERT INTO tabel
    SET veld = '".$_POST['waarde']."';";[/code:1:862d2ff26a]
    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 in de $sql met mysql_real_escape_string().

    Is dit werkelijk veiliger dan het code fragment hierboven, of is het overbodige moeite? Kunnen NULL-bytes, tabs, newlines etc. werkelijk last veroorzaken wanneer men HTTP requests tweakt?[/quote:862d2ff26a]
    Dit is sowieso fout, omdat je de invoer van de 'gebruiker' altijd moet valideren.

    Rule no. 1

    Alles wat je in de database opslaat, komt er ook op dezelfde manier uit.
    Als je de query op deze manier niet kunt manipuleren, dan kun je allicht de pagina manipuleren als je bijvoorbeeld geen htmlspecialchars() ofzo gebruikt.
  • [quote:30a7258c5a="h4xX0r"]Dit is sowieso fout, omdat je de invoer van de 'gebruiker' altijd moet valideren.[/quote:30a7258c5a]
    Vanzelfsprekend, daar weet ik alles van. Overigens pas ik htmlspecialchars() pas toe bij het weergeven van de data in plaats van bij het opslaan, maar dat terzijde.

    Mijn vraag ging hier echt specifiek over het uitvoeren van de query, en daarbij dus de kans op mogelijke SQL injecties of andere grappen. Waarom is mysql_real_escape_string() in het leven geroepen, wat is hier de meerwaarde van boven het quotes verhaal, als je het hebt over de veiligheid van je script?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.