[TUT] MySQL SQL Injection verhindern [TUT]

  • SQL-Injections mit mysql_real_escape_string(); verhindern


    Als SQL-Injections bezeichnet man Angriffe auf eine SQL-Query bei der Werte eingeschleusst werden, die vom Webseitenbetreiber eigentlich so nicht vorgesehen waren.

    Nehmen wir an, wir haben folgende Beispielhafte SQL-Query:

    SQL
    $query = "SELECT * FROM users WHERE user='$user' AND password='$password'";

    Nun könnte ein Angreifer ins Formularfeld Password den String ' OR 1=1' eingeben, um sich als admin einzuloggen. Was würde aus der Query dann werden? Sie lautete:

    SQL
    SELECT * FROM users WHERE user='admin' AND password='' OR 1=1'


    Weil 1=1 immer wahr ist würde SQL die Bedingung also als erfüllt ansehen und dem Nutzer das einloggen erlauben.
    Hier kommt mysql_real_escape_string(); ins Spiel.

    Eine Query, deren Eingaben mit mysql_real_escape_string(); maskiert worden sind, bietet diese Angriffsgefahr nicht! So zum Beispiel:

    SQL
    $query = "SELECT * FROM users WHERE user='".mysql_real_escape_string($user)."' AND password='".mysql_real_escape_string($password)."'";

    TUT Quelle

    Spoiler anzeigen
    Zitat

    Da ich kein Bock hab selben ein TUT zu schreiben :)

  • PHP
    (public) function escape($textzumfiltern)
    {
        return htmlspecialchars(mysql_real_escape_string($textzumfiltern));
    }

    dann muss man nicht die riesige Funktion schreiben und man hat dafür es 2x gefiltert. Write less, do more :thumbup:

  • PHP
    (public) function escape($textzumfiltern)
    {
        return htmlspecialchars(mysql_real_escape_string($textzumfiltern));
    }

    dann muss man nicht die riesige Funktion schreiben und man hat dafür es 2x gefiltert. Write less, do more :thumbup:


    Kommt drauf an, wenn man den Text so ausgibt bringt es einem
    nichts wenn es für eine Query escaped wurde.

    Und wenn man eine Query festlegt bringt es einem
    nichts wenn es für XSS escaped wurde.

    Cheers,
    Steve Winfield

  • Warum so schwer, warum nicht einfach alle $_GET und $_POST anfragen filtern lassen?
    sowas passiert nämlich meistens durch den variablen, ich glaube kaum das jemand sowas wie ' in ne variable packt und dann die query dafür ausgibt (okay, Amateure vielleicht)

    PHP
    foreach($_POST as $key => $val)
     $_POST[$key] = mysql_real_escape_string($val);
    
    
    foreach($_GET as $key => $val)
     $_GET[$key] = mysql_real_escape_string($val);

    dann muss man das nicht immer extra mit ner funktion machen sondern das einfach am anfang jedes skriptes hinzufügen (include 'cleanup.php')

    oder wer ganz sicher gehen will macht das mit den $GLOBALS;

  • Unnötig da 99% aller unserer selbsternannten "Hacker/Downer" nur ein ddos tool bedienen können und von Sql Injection keine Ahnung haben.


    Es gibt welche die es können (und die, die es nicht können nutzen halt einfach Havij), und die finden es wohl funnier im Hotel Alerts
    zu versenden und Screens auf RT zu posten als die Seite zu downen.

    Cheers,
    Steve Winfield

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!