Problem mit SQL injection

  • Hallo!

    Ich bin gerade dabei ein Gästebuch zu programmieren.

    Nun möchte ich dieses auf Sicherheit testen und bin dabei auf die SQL-injection gestoßen.
    Ich hab gegoogled und habe dann versucht diese SQL-injection an meinem Gästebuch zu testen.

    Die SQL-Befehle hab ich als Gästebuchnachricht eingegeben.

    Könnte mir wer sagen ob ich mit meinem Gästebuch sicher bin oder was ich noch verändern muss ?

    hier mal der PHP teil meines codes :

  • Wie würde den eine genaue SQL injection lauten, mit der man mein Gästebuch überlisten könnte?
    Denn wenn ich ein SQL Befehl als Gästebucheintrag verwende, wird dieser in eine Variable gespeichert und verändert somit nicht mein Quellcode, sondern wird einfach als Gästebucheintrag ausgegeben.

  • Ich gebe mal für das Feld name das hier ein: '; DROP DATABASE;
    Wenn du das in deinen SQL-Befehl einbindest sieht das folgendermaßen aus:
    INSERT INTO gaestebuch SET name=''; DROP DATABASE;


    Sämtliche Daten die vom Client kommen müssen unbedingt vor der Verwendung in SQL-Statements mit mysql_real_escape_string behandelt werden.
    Bsp:

    PHP
    $name = mysql_real_escape_string($_POST['name']);

    Alternativ kannst du auch Mysqli oder PDO mit prepared Statements verwenden. Da wird dir das escapen abgenommen.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Es tut sich immer noch nichts.

    Wenn ich die angegebenen Daten in das Feld name eingebe, kommt folgende Fehlermeldung:

    Ungültige Abfrage: 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 DATABASE;', email ='', url ='', datum ='2011-03-11 12:29:53', eintrag ' at line 1

  • Das war lediglich ein ganz simples Beispiel um zu demonstrieren wie das grundlegend funktioniert. Eine genaue Anleitung wird dir hier niemand geben. Wenn du nicht glauben willst das User-Eingaben vor der Verwendung in SQL-Statements escaped werden müssen lass das escapen weg und hoffe darauf, dass dich kein Auftraggeber wegen grober Fahrlässigkeit verklagt wenn Schindluder mit seinen Daten getrieben wird.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Es geht hier nicht weil mysql_query nur einen Befehl unterstützt (union oder ähnliches würde gehen bringt hier aber nicht viel)

    Dennoch schützen

    mfg