Ergebnis 1 bis 3 von 3
  1. #1
    ©(¶Óo¶) Avatar von kalachnikov
    Registriert seit
    12.07.2009
    Beiträge
    624

    Standard Vorbeugung von SQL Lücken (Authentication Bypass vermeiden!)

    Ich habe dieses Tutorial als Reaktion, auf dem von jOkR gestarteten Thread (http://free-hack.com/showthread.php?t=46573), zur schließung von SQL Lücken geschrieben

    Ich sehe vom Threadstarter keinen erkennbaren Hinweis auf eine SQL Lücke
    geschweige denn eine Methode zur Vorbeugung von Sicherheitslücken (SQL).
    Ich hab mir mal kurz die Mühe gemacht und einen kleinen Code geschrieben und zwar einen (1) der SQL Lücken enthält und der
    andere (2), wie man diesen mittels Filters schließen kann.(Ein sehr praktisches Beispiel, wie ich finde )
    Ich habe mal auf die "//" verzichtet und werde daher den Code nicht kommentieren, denn ich finde,
    dass dieser Code für Anfänger bzw. für Menschen die mit PHP nix zu tun haben, nicht geeignet ist!
    Wer dennoch Interesse daran hat, und den Code nicht versteht, sollte PHP lernen!

    -->http://tut.php-quake.net/de/

    PHP-Code:
    <?
    //login.php
    //Attacke und Vorbeugung von Lücken (SQL)
    //by kalachnikov
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    $link = mysql_connect('localohst', 'root', 'pass') or die ('Error: '.mysql_e
    rror());
    mysql_select_db("sql_inj", $link);
    $query = mysql_query (SELECT * FROM sql_inj WHERE user ='".$user."' AND pass
    ='" .$pass. "'",$link);
    if (mysl_num_rows($query) == 0) {
    echo"<scripttype=\"text/javasceipt\">window.location.href='index.html' ;</script>";
    exit;
    }
    $logged = 1;
    ?>
    Ein Attacker sendet die Variablen $_POST['user'] , $_POST['pass'] zu login.php, die direkt in die SQL Query gelagert werden.
    " " könnte somit folgendes machen:
    $user = 1'OR'1'='1
    $pass = 1'OR'1'='1
    (Authentication Bypass)

    Vorbeugung:
    PHP-Code:
    <?
    //Hier ist ein Beispiel für einen benutzerdefinierte SQL-Filter
    $title = $_POST['title'];
    $description = $_POST['description'];
    // Cleaner wird definiert
    $dirtystuff = array("\"", "\\", "/", "*", "'", "=", "-
    "; "#", ";", "<", ">", "+", "%");
    // Cleaner includieren
    $title = str_replace($dirtystuff, "suchts euch aus", $title); 
    $description = str_replace($dirtystuff, "suchts euch aus", $description);
    //zur Verdeutlichung
    //rein: a';DROP TABLE users; SELECT * FROM datei '%
    //raus: aDROP TABLE users SELECT FROM datei
    ?>
    [kann sein, dass ich statt bla, bal geschrieben habe(passiert mir öfters) habe nur kein Bock und keine Zeit das alles nochmal durchzuschauen..
    Es sollte dennoch verständlich sein]
    Geändert von kalachnikov (29.08.2009 um 20:55 Uhr)


    |____
    free-hack.com___|__\



  2. #2
    if(1x<>)!~/^(11+)\1+$/
    Registriert seit
    13.08.2007
    Beiträge
    524

    Standard

    Solche Filter bieten kaum Schutz... Benutzt lieber Funktionen wie mysql_real_escape_string() bzw intval() (je nach Dateityp) (am besten global durch GET POST COOKIE usw. laufen lassen) oder verwendet prepared Statements.


  3. #3
    ©(¶Óo¶) Avatar von kalachnikov
    Registriert seit
    12.07.2009
    Beiträge
    624

    Standard

    ja! die Datenbank string encoding Funktion (mysql_real_escape_string()) benutz ich persönlich auch, habs vergessen zu erwähnen, ist natürlich korrekt!


    |____
    free-hack.com___|__\



Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •