Ergebnis 1 bis 8 von 8

Thema: SQL-Injection

  1. #1
    Unregistriert
    Gast

    Standard SQL-Injection

    Hallo

    Ich habe 2 MySQL Scripts und möchte mich dabei vor SQL-Injectoins schützen.

    Ich hab auch 2 Links über diesem Thema, was ich jedoch nicht ganz verstehe:
    http://phpforum.de/forum/showthread.php?t=218433
    http://de.wikipedia.org/wiki/SQL-Injection#PHP

    Was ich weiss, ist daß ich irgendetwas escapen soll ... nur was und wie genau scheint mich irgendwie zu irritieren.

    So sehen meine Scripts aus:

    Script1.php
    PHP-Code:
    <?php
    if (!isset($_GET['id']) or empty($_GET['id'])) {
        echo 
    "Error: No Access";
    }
    else {
    $id $_GET['id']; 
    $db mysql_connect('xxxx''xxxx''xxxx');
    if (!
    db) {
        die(
    "Connection failed - Not able to connect to database: " mysql_error());  
    }
    $select mysql_select_db("xxxx"$db);
    if (!
    $select) {
        die(
    "Connection failed - Not able to connect to database: " mysql_error());
    }

    $result mysql_query("SELECT username,email FROM table WHERE id='$id'");
    if (!
    $result) {
        echo 
    'Connection failed: ' mysql_error();
        exit;
    }

    $row mysql_fetch_assoc($result);
    mysql_free_result($result);

    if (!
    $row) {
        echo 
    "Error: No Access";
    }
    else {

    // do stuffs

    }
    }
    ?>
    Script2.php
    PHP-Code:
    <?php
    if (empty($_GET['username']) or empty($_GET['email']) or !isset($_GET['submit'])) {
    echo 
    "Please get back and fill in all fields.";
    }
    else { 
        
    $username $_GET['username'];
        
    $email $_GET['email'];
        
    $db mysql_connect('xxxx''xxxx''xxxx');
        if (!
    db) {
            die(
    "Connection failed - Not able to connect to database: " mysql_error());  
        }
        
    $select mysql_select_db("xxxx"$db);
        if (!
    $select) {
            die(
    "Connection failed - Not able to connect to database: " mysql_error());
        }

    $test "INSERT INTO table SET username = '$username', email = '$email'";
    $result mysql_query($test);

    $id mysql_insert_id(); 
    echo 
    $id;
    }
    ?>
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Prinz(essin) Avatar von -Bambino-
    Registriert seit
    21.12.2007
    Ort
    Berlin
    Beiträge
    865
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    4

    Standard AW: SQL-Injection

    Das wurde alles schon einwandfrei zusammengetragen:

    Sicherheitslücken
    SQL Injection
    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  3. #3
    König(in) Avatar von crAzywuLf
    Registriert seit
    03.02.2009
    Beiträge
    1.175
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL-Injection

    Hier mal ein Beispiel fürs erste Script:
    PHP-Code:
    <?php
    if (!empty($id) && ctype_digit($id))
    {
        
    $id = (int) $_GET['id']; 
        
    $db = @mysql_connect('xxxx''xxxx''xxxx') or die("Connection failed - Not able to connect to database!");
        
    $select = @mysql_select_db("xxxx"$db) or die("Connection failed - Not able to connect to database!");
        
        
    $result mysql_query("SELECT `username`, `email` FROM `table` WHERE `id` = '" mysql_real_escape_string($id) . "'"$db) or die('Query failed! (' mysql_error() . ')');
        
        if(@
    mysql_num_rows($result) > 0)
        {
            
    $row mysql_fetch_assoc($result);
            
    // do stuff
            
    mysql_free_result($result);
        }    
    }
    else
    {
        echo 
    'No Access';
    }
    ?>
    mysql_real_escape_string()
    html_entities()
    ctype_alnum()
    ctype_digit()
    addslashes()

    sind einige von vielen die man benutzen sollte/kann!
    Geändert von crAzywuLf (14.05.2009 um 17:37 Uhr)
    Gruß crAzywuLf

  4. #4
    Unregistriert
    Gast

    Standard AW: SQL-Injection

    ok danke, es gibt aber 2 sachen die ich dabei nicht ganz verstehe:

    1. Wozu das '@' hinter mysql?

    2. Was ist mit mysql_real_escape_string() gemeint? Was ich herausfinden konnte, ist das beim Verwenden von mysql_real_escape_string() folgende Zeichen deaktiviert werden:
    \x00
    \n
    \r
    \
    '
    "
    \x1a

    Ist das so wie ich es verstanden habe richtig oder liege ich da falsch?

  5. #5
    Meister(in) Avatar von Afrael
    Registriert seit
    26.04.2009
    Ort
    NRW
    Alter
    26
    Beiträge
    313
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL-Injection

    1. @ vor einer Funktion zu schreiben unterdrückt Fehlermeldungen, die von der Funktion selber ausgeworfen werden.

    2. Das ist richtig. Diese Zeichen können benutzt werden, um eine SQL-Injektion durchzuführen.
    [Einschub: Würde die Query einfach "SELECT `username`, `email` FROM `table` WHERE `id` = $id" ohne einfache Anführungsstriche um $id lauten, kämen wir als Angreifer sogar ohne diese Zeichen aus.]

    Da wir die $_GET['id'] bereits nach Integer, also in eine Ganzzahl, konvertiert haben, ist mysql_real_escape_string an dieser Stelle sogar überflüssig. Allerdings sollte es für $username bzw $email verwendet werden.
    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  6. #6
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL-Injection

    Vielleicht sollte ich das Beim SQL-Injection-Artikel aufnehmen:
    Wenn escapet wird, braucht man die einfachen Anführungszeichen.
    Bei intval etc. ist dies nicht nötig.
    Schau dir einfach mal die Beispiele an, und du siehst, wie ein Query von einem Cracker verändert werden kann.

    Übrigens deaktiviert mysql_real_escape_string keine Zeichen, sondern fügt vor ihnen Backslashes (\) ein. Somit werden sie von MySQL als einfache Zeichen behandelt.

    Edit:
    Habs im Artikel aufgenommen.

  7. #7
    Unregistriert
    Gast

    Standard AW: SQL-Injection

    Danke für eure Hilfe. Ich schätze ich habe einiges dazu gelernt.

  8. #8
    Großmeister(in) Avatar von Darkxor
    Registriert seit
    17.11.2007
    Ort
    NRW
    Beiträge
    663
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: SQL-Injection

    Hier findest du auch einige hilfreiche Informationen:
    http://www.elexpress.de/archives/200...eitsmasnahmen/
    -

Ähnliche Themen

  1. Sql-Injection bei include ?
    Von DaRealAndy im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 20
    Letzter Beitrag: 28.07.2008, 17:45
  2. Wie schütze ich mich vor SQL-Injection?
    Von RedFighter im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 11
    Letzter Beitrag: 07.07.2008, 17:01

Stichworte

Berechtigungen

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