[PHP & MySql] Welche Sonderzeiche sind gefährlich?

  • Hallo.


    Es gibt addslashes, das ", ' und \ den garaus macht, dann noch metaslashes. Und als ob das nicht reichen würde, kommt auch noch ein addcslashes dazu, mit dem man beliebige Zeichen "unwirksam" machen kann.


    Aber mal ernst. Was muss rein? Wenn ich addslashes anwende, dann müsste doch die Sache Sicher sein, oder? Denn ein +, & oder sonstiges kann doch zwischen den Anführungszeichen nicht gefährlich werden.


    Vielleicht kennst sich ja da einer aus.


    Danke, FLO

  • Hast vollkommen recht. addslashes reicht aus, wenn es nicht sowieso schon automatisch gemacht wird (siehe Option magic_quotes_gpc in der php.ini). Ich will aber nochmal versuchen zu erklären, warum man das überhaupt machen muss.


    Ein Beispiel wo es gefährlich werden kann:


    PHP
    mysql_query("DELETE FROM tabelle WHERE id='".$_GET["id"]."'");


    Ein böser Mensch könnte ganz gemein die Website so aufrufen, dass der Parameter id den Wert
    3' OR TRUE OR id='4
    enthält, was dazu führen würde, dass alles gelöscht wird, da folgener Query ausgeführt wird:

    PHP
    mysql_query("DELETE FROM tabelle WHERE id='3' OR TRUE OR id='4'");


    Und dieser Query sorgt dafür, dass die komplette Tabelle geleert wird.


    Edit: ups, zu früh auf "Antworten" geklickt, wollte doch nur Vorschau wählen. Naja.


    Also. Das addslashes würde das Problem beheben und der Query wäre

    PHP
    mysql_query("DELETE FROM tabelle WHERE id='3\\\\' OR TRUE OR id=\\\\'4'");


    und letztendlich wird nichts gelöscht, weil es diese ID sehr wahrscheinlich nicht gibt.


    Andere Angriffsflächen sind somit ausgeschlossen.


    Wenn die Option magic_quotes_gpc auf On ist, muss addslashes jedoch nicht seperat ausgeführt werden.

  • Danke, das wollte ich wissen.


    Das mit der config.ini dachte ich mit auch schon. Denn auf meinem localhost ist das so, dass das automatisch gemacht wird. Als ich dann meine Seite aber zum Hoster übertragen habe, kam eben ein entsprechender mysql_error. Den habe ich dann schnell behoben, indem ich bei jeder query das addslashes eigefügt habe.


    Dann bin ich so weit berühigt. Danke :top:


    MfG Flo

  • @korelstar
    Ich will ja nicht doof erscheinen, aber dein Beispiel mit und ohne addslashes sieht irgendwie exakt gleich aus, und somit genauso "gefährlich".


    Ich nehme doch mal an, du wolltest schreiben, das etwas entsteht wie

    Code
    mysql_query("DELETE FROM tabelle WHERE id='3\\' OR TRUE OR id=\\'4'");


    wodurch nichts gelöscht wird, weil nach der ID " 3\' OR TRUE OR id=\'4 " gesucht wird, die aber wahrscheinlich nicht vorhanden ist...


    Gruß, Simon

  • Da hast du natürlich vollkommen recht. Ich muss allerdings TT die Schuld in die Schuhe schieben. Ich habe definitiv die Backslashes drin gehabt, beim Editieren eben hat er sie sogar angezeigt. Mit diversen Varianten versuche ich die ganze Zeit, dass heile zu biegen, aber TT -- oder eher gesagt vBulletin -- löscht mir konsequent die Backslashes raus. Hmpf.


    Edit: Die müssen einem ja sagen, dass vBulletin zweimal hintereinander stripslashes verwendet und man daher vier Backslashes eingeben muss um eines herauszubekommen. Bzw. vermutlich geht vBulletin davon aus, dass die Magic-Quotes mit der o.g. Option deaktiviert sind.

Jetzt mitmachen!

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