Wie schütze ich mich vor SQL-Injection?

  • Hallo,

    ich wollte mich erkundigen wie ich meinen Datenbanken vor SQL-Injection sichern kann. Ich bin ein richtiger Anfänger was SQL angeht deshalb wäre es nett wenn es jemand sehr "einfach" erklären, oder mir ein Link dazu geben könnt. Ich betreibe ein Browsergame und habe dort eine Hackdrohung bekommen.

    Bitte um Hilfe!!!

    Red[/quote]


  • Variablen bei SQl_Verwendung grundsätzlich escapen und sich nie auf User-Eingaben verlassen.
    Grundprinzip: All Input Is Evil

  • Wie NoOob schon gesagt hat: All Input is Evil

    zuerst überprüfen ob variablen auch gewünschte werte enthalten

    also wenn man eine zahl eingeben muss und es kommt, ein text ist es schon mal falsch

    ausser dem noch die funktion: mysql_real_escape_string()

    --------------------------------------------------------------------------

    Also wie am Flughafen, alles wird gründlich durchsucht
    Wenn was nicht passt, sofort elimieren ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • mysql_real_escape_string() , könntest das etwas genauer beschreiben? Wäre klasse. Muss ich da was in der Login.php ändern? Wenn ja was? Oder lieg ich wie immer falsch? :?

    Red


  • Hehe wie oft soll ich das noch lesen xP

    Da steht nur Zeug drinne was ein Anfänger in diesem Gebiet nich so richtig vertshet (z.B. ICH^^)

    Gibts da keine leichtere Anleitung?


  • Wenn du die doku bei so einfachen funktionen schon nicht verstehst, ist dann programmieren das richtige hobby für dich? Man könnte ja auch einfach mal etwas experimentieren oder eines der zahlreichen tutorials lesen.

    $string = mysql_real_escape_string($_POST['name_vom_formularfeld']);

  • Da hat erst

    Code
    mysql_escape_string($_POST['username'])

    gestanden und ich habe es durch

    Code
    mysql_real_escape_string($_POST['username'])

    das ersetzt, wie es in wikipedia steht.

    Stimmt das? bzw. reicht das schon?


  • ich hab dir in meinem 1. post noch geschrieben, was was wichtigste ist ;)
    aber das hast du anscheinend überlesen ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Prepared statements sind dafür super geeignet. Schau dir mal PDO an.

    Numerische Werte kannst du als intetgr casten.

    Beispiel

    Code
    mysql_query('SELECT * FROM `xxx` WHERE `ID`="'.(int)$_GET['id'].'" LIMIT 1');

    Und wie oben schon erwähnt mysql_real_escape_string();

  • PDO ist wirklich das beste.
    Geht auch recht einfach, stell dir vor, du hast ein PDO-Obfekt angelegt:

    Code
    $result = $dbh->prepare("INSERT INTO tabelle (spalte1, spalte2) VALUES (?, ?)");
    $result->execute(array($_POST['spalte1'], $_POST['spalte2']));


    Und der Benutzer kann jetzt so viele SQL Befehle POSTen, wie er will, die Befehle werden dann in der DB gespeichert.
    Du musst es dir natürlich noch etwas genauer anschauen.

    Viele liebe Grüße
    The User

  • RedFighter,
    guuuten...aber sehr guuuten tag RedFighter *grinz* :twisted:
    was für ein zufall dass ich dich finde....hmmmm

    also eig. is der tag nicht so gut....denn
    DEEEENNNN...
    THE LAST UNIVERSE funktioniert nich....
    wiesoo????
    :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:

    mfg
    warboy