bleicher: md5 insert?

Grüße,

gaanz kurze Frage -

kann in $bla=md5($_POST['dings']) wenn 'dings' ein Formulareingabe ist etwas reingschleust werden? PHP_code-insertion oder änliches?

MFG
bleicher

--
__________________________-
Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
Boccaccio
  1. Hello,

    kann in $bla=md5($_POST['dings']) wenn 'dings' ein Formulareingabe ist etwas reingschleust werden? PHP_code-insertion oder änliches?

    na ja, theoretisch schon, und zwar wenn jemand es schafft

    1. eine schädliche Befehlsfolge mit maximal 32 Zeichen zu finden
    2. anschließend so lange rumprobiert, bis er einen Originaltext findet, dessen MD5 Signatur genau dieser schädlichen Befehlsfolge entspricht
    3. das Ergebnis von (2) als Inhalt von 'dings' abschickt.

    Fazit: Möglich ja, mit viel Aufwand verbunden

    MfG
    Rouven

    --
    -------------------
    Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
    1. Grüße,| Hello,

      kann in $bla=md5($_POST['dings']) wenn 'dings' ein Formulareingabe ist etwas reingschleust werden? PHP_code-insertion oder änliches?

      1. anschließend so lange rumprobiert, bis er einen Originaltext findet, dessen MD5 Signatur genau dieser schädlichen Befehlsfolge entspricht

      d.h.

      ']) <bösescode>

      würde nicht um die md5-Verarbeitung gehen gehen?

      k dane - ist beruigend :)
      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
      Boccaccio
      1. Hello,

        ']) <bösescode>
        würde nicht um die md5-Verarbeitung gehen gehen?
        k dane - ist beruigend :)

        kannst du das mal bitte in Deutsch formulieren??
        gesetz den Fall ich überlege mir
        readfile("secretpasswords.txt");
        bei dir einzuschleusen und ich schaffe es herauszufinden, dass
        asdfhas34234kjahdf98234adfkjashdfa9823423948
        -> MD5( "asdfhas34234kjahdf98234adfkjashdfa9823423948" );
        genau dies ergibt, dann hast du u.U. verloren.

        MfG
        Rouven

        --
        -------------------
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
      2. Hallo bleicher,

        d.h.

        ']) <bösescode>

        würde nicht um die md5-Verarbeitung gehen gehen?

        Nein, wieso?

        Wenn dein Code

        $bla=md5($_POST['dings'])

        und dir jemand mit POST folgendes als Ding schickt: »']) <bösescode>«

        Dann resultiert das in:

        $bla=md5('\']) <bösescode>')
        (bzw. etwas verständlicher, dafür aber nicht ganz so korrekt:)
        $bla=md5("']) <bösescode>")

        Selbst wenn das md5 nicht da wäre, oder jemand die wirkung des md5 umdrehen könnte, erstmal hast du die übergebenen Daten einfach nur in einer String-Variable, die primär sicherheitstechnisch völlig unbedenklich ist. Du musst halt nur aufpassen, wie du diese weiterverarbeitest. Das heißt, bedenklos ausgeben, in Dateien schreiben, Datenbankzugriffe damit ausführen usw. ist tabu.

        Jonathan

  2. Hallo bleicher,

    kann in $bla=md5($_POST['dings']) wenn 'dings' ein Formulareingabe ist etwas reingschleust werden? PHP_code-insertion oder änliches?

    Wenn ich eine Variable $foo = "'; rm *; echo '" erstelle, ist das erstmal völlig ungefährlich; es handelt sich um einen String wie jeder andere, denn dies wird dabei ja nicht als Befehl ausgeführt. Aufpassen musst du nur, wenn du mit dem Inhalt der Variable etwas tust, beispielsweise ihn als Argument für ein Shell-Programm zu verwenden, das kann dann böse enden:

    exec("echo '$foo'"); # Löscht alle Dateien in dem Verzeichnis!

    Deswegen musst du in solchen Fälle die entsprechenden Escape-Funktionen verwenden, hierbei wäre das [escapeshellarg().

    [code lang=php](http://www.php.net/escapeshellarg)exec("echo ".escapeshellarg($foo)); # Harmlos[/code]

    Bei Dingen wie Datenbank-Abfragen oder Ausgabe als HTML ist es natürlich ähnlich, im Wesentlichen müssen lediglich andere Escape-Funktionen verwendet werden.

    Das heißt, das dein Befehl, so wie er da steht, völlig harmlos ist. Der einzige Angriffspunkt ist, wie Rouven schon sagte, dass dein Besucher eine Zeichenkette kennt, der MD5-Hash "<etwas-böses>" ist, eine sehr unwahrscheinlich Situation. Aber auch dann ist das nur wirklich gefährlich, wenn du $bla in einem entsprechenden Kontext verwendest, ohne es richtig zu maskieren.

    Schöne Grüße,

    Johannes

    1. Grüße,| Hallo bleicher,

      Wenn ich eine Variable $foo = "'; rm *; echo '" erstelle, ist das erstmal völlig ungefährlich; es handelt sich um einen String wie jeder andere, denn dies wird dabei ja nicht als Befehl ausgeführt. Aufpassen musst du nur, wenn du mit dem Inhalt der Variable etwas tust, beispielsweise ihn als Argument für ein Shell-Programm zu verwenden, das kann dann böse enden:

      ist kein shell, aber das ergebniss der $ding=md5($_POST[]) wird dann in $_SESSSION[]=$ding geschrieben und über sql-query als WHERE=$ding verwendet.. ich habe da sicherheitshalber htmlentities() dazugeschaltet. bringts was?

      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
      Boccaccio
      1. echo $begrüßung;

        ist kein shell, aber das ergebniss der $ding=md5($_POST[]) wird dann in $_SESSSION[]=$ding geschrieben und über sql-query als WHERE=$ding verwendet.. ich habe da sicherheitshalber htmlentities() dazugeschaltet. bringts was?

        Wir™ reden uns hier doch schon seit Ewigkeiten den Mund fusselig, dass man sowohl _immer_ als auch _nur_ kontextspezifisch behandeln soll. Liest du denn hier gar nicht mit? Werte, die in ein SQL-Statement eingefügt werden sollen, sind für dieses SQL-Statement zu behandeln, nicht für irgendein Ausgabemedium, das erst irgendwann viel später die Daten zu Gesicht bekommt. Für MySQL-Statements ist dafür die Funktion mysql_real_escape_string() zuständig.

        Für md5() kann man sich im Grunde genommen die Bedenken ganz sparen, denn die Ausgabe besteht immer nur aus den Zeichen 1..9 und a..f. Darin sind also keine Klammern oder andere Sonderzeichen enthalten, die man zur Bildung von ausführbarem Code benötigt. Es schadet aber auch nicht, auch diesen Wert konsequenterweise durch mysql_real_escape_string() zu schicken, bevor er in die Query eingesetzt wird. Vielleicht hast du ja noch andere Fehler im Code, durch die die Ausführung von md5() umgangen werden kann. Und dann rettet dich wenigstens mysql_real_escape_string() vor einer in dem Fall eventuell möglichen SQL-Injection.

        echo "$verabschiedung $name";

        1. Grüße,| echo $begrüßung;

          Wir™ reden uns hier doch schon seit Ewigkeiten den Mund fusselig, dass man sowohl _immer_ als auch _nur_ kontextspezifisch behandeln soll. Liest du denn hier gar nicht mit? Werte, die in ein SQL-Statement eingefügt werden sollen, sind für dieses SQL-Statement zu behandeln, nicht für irgendein Ausgabemedium, das erst irgendwann viel später die Daten zu Gesicht bekommt. Für MySQL-Statements ist dafür die Funktion mysql_real_escape_string() zuständig.

          mein fehler ich bekenne mich des noobismus, escape_strings ist drin ;)

          MFG
          bleicher

          --
          __________________________-
          Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
          Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
          Boccaccio