kostenloser Webspace werbefrei: lima-city


SQL-Injection

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    dustin1

    Kostenloser Webspace von dustin1, auf Homepage erstellen warten

    dustin1 hat kostenlosen Webspace.

    Hallo lima-city (User),
    ich habe vor kurzer Zeit von einer sogenannten "SQL-Injection" erfahren und mich interessiert jetzt natürlich wie man sich davor schützen kann. Soweit ich das sehe braucht man immer ein Semikolon um eine Injektion durchzuführen, demnach könnte dies doch eigentlich helfen...
    if (ereg(";", $variable) {
    	echo "Es ist ein Fehler aufgetreten: Eine Injektion wurde erkannt.";
    }

    ...oder sehe ich das falsch?

    dustin1 :biggrin:

    Beitrag zuletzt geändert: 19.2.2009 18:30:47 von dustin1
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    Was hat eine Injection mit einem Semikolon zu tun? Es gibt auch andere Möglichkeiten, Queries aneinander zu reihen:

    $sql = "SELECT * FROM tabelle WHERE id = ".$_GET["id"];


    seite.php?id= 1 AND UPDATE user SET password = 'hahaha' WHERE username = 'admin'


    ergibt:

    $sql = "SELECT * FROM tabelle WHERE id = 1 AND UPDATE user SET password = 'hahaha' WHERE username = 'admin'


    Schau dir lieber mal mysql_real_escape_string() an.

    Beitrag zuletzt geändert: 19.2.2009 18:35:58 von trueweb
  4. Autor dieses Themas

    dustin1

    Kostenloser Webspace von dustin1, auf Homepage erstellen warten

    dustin1 hat kostenlosen Webspace.

    Vielen Dank für den Hinweis, ich schaue mir das später einmal an.

    dustin1 :biggrin:

    Beitrag zuletzt geändert: 19.2.2009 18:51:50 von dustin1
  5. f*************e

    Kochrezept gegen SQL-Injectons:

    Folgendes Szenario:
    Wir haben eine Seite die 2 GET Abfragen Entgegennimmt:
    $id = $_GET['id'];
    $name = $_GET['name'];


    Da wir für 'ID' _immer_ einen Zahlen Wert wollen und Text in dieser Variable nicht haben wollen wandeln wir sie einfach in ein Int um:
    settype($id, 'integer');


    Für 'name' wollen wir einen Text entgegennehmen. Um auszuschließen, dass Zeichen wie ' verwendet werden können benutzen wir die PHP Funktion 'mysql_escape_string' wobei einige eher zu 'mysql_real_escape_string' neigen, da diese Funktion auch noch die Kodierung der Datenbank mit einbezieht. Dafür muss aber eine Verbindung mit der Datenbank bereits stehen. Also hier mein Beispiel:
    $name = mysql_escape_string($name);


    Nun ist es wichtig die Variablen auch richtig in das SQL Statement einzubinden. Dafür muss man darauf achten, dass alle Variablen in Anführungszeichen gesetzt sind:
    $query = ("SELECT user_login FROM $name WHERE ID = '$id'");



    Wenn du diese Punkte beachtest, oder dir gleich ein Modul schreibst das alle SQL Abfragen in dem Schema ausführt bist du auf der sicheren Seite.


    Achja,
    @trueweb:
    Dein Beispiel Query ist nicht Funktionsfähig ;)

    Beitrag zuletzt geändert: 19.2.2009 18:48:53 von five-three-nine
  6. five-three-nine schrieb:
    Achja,
    @trueweb:
    Dein Beispiel Query ist nicht Funktionsfähig ;)


    Naja war auch nur ein Beispiel denke ich ;-)
    Alternativ hätte auch nur stehen könenn:
    seite.php?id=1 or 1=1


    Dann werden alle Zeilen der Tabelle ausgegeben und das wäre glaube ich nicht Sinn der Sache gewesen oder? ;-)
    Grüßle
  7. f*************e

    Naja er Vergewaltigt den "AND" Befehl.
    Der ist nicht dazu da Statements zu verknüpfen oder aneinander zu Reihen ;)
  8. Generel würde ich jede eingabe des Users Filtern. Bei phpclasses.org findest du so einige Filterklassen für Usereingaben (get/post) die du dazwischen schalten kannst. Diese Filtern dann sql / javascript oder sonstigen "bösen" code herraus...
  9. Autor dieses Themas

    dustin1

    Kostenloser Webspace von dustin1, auf Homepage erstellen warten

    dustin1 hat kostenlosen Webspace.

    Das schaue ich mir späte auf jeden Fall auch noch einmal an, das scheint ja noch praktischer zu sein wenn er bösartige JavaScripts auch gleich herausfiltert.

    dustin1 :biggrin:
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!