1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

PHP Code Injection verhindern?

Discussion in 'Programmieren' started by AH1988, Sep 14, 2010.

Thread Status:
Not open for further replies.
  1. AH1988

    AH1988 Guest

    Hallo zusammen,

    ich versuche mich gerade in der Programmierung von Websiten mittels php und habe folgendes Problem:

    In einer Seite "Start.php" habe ich ein Formular, in welchem der Nutzer sich selbst einen Nickname geben kann.
    HTML:
    <form action="Confirm.php" method="post">
      Ihr Nickname: 
        <input type="text" value="" name="nick">
       <input type="submit" value="OK" id="nick_ok" name="submit">
    </form>

    Auf der Seite "Confirm.php" soll der Nick bestätigt werden, dazu wird er nocheinmal angezeigt.
    PHP:
    <?php
    [...]
    echo 
    "Sie wollen wirklich \" $_Post['nick']\" heißen?";
    [...]
    ?>
    Nun meinte ein Freund er könne mir jederzeit soetwas...
    PHP:
    $inhalt file_get_contents('xxx.php'); highlight_string($inhalt);
    ...injezieren und so an jeden Quelltext auf meiner Seite kommen.

    Als Lösung umd das zu verhindern schlug er folgendes vor, allerdings sehe ich da kaum einen Unterschied:
    PHP:
    <?php
    [...]
    $Nick $_Post['nick'];
    echo 
    "Sie wollen wirklich \"$Nick\" heißen?";
    [...]
    ?>

    Nun meine Fragen:
    1. Kann man in besagten php Code eigenen php-Code injezieren?
    2. Wenn ja, hilft die Alternative um das zu verhindern?
    3. Wenn 2. nein, wie verhinder ich es dann?

    Freundlicher Gruß
     
  2. salim_aliya

    salim_aliya Halbes Megabyte

    In der Regel ist es so, dass Variablen Inhalte nicht geparst werden. Deshalb ist es mit dem Code Beispiel von dir so nicht m&#246;glich.

    Selbst wenn es so sein sollte, die alternative hilft nicht. Sie ist quasi das gleiche in gr&#252;n.

    Kommt ganz darauf an, wie er denn seinen Code Injizieren will. Stelle sicher, dass dieser keinen Zugang in den Server hat, da reicht schon aus, wenn er diesen Code in einer PHP Datei irgendwie hochladen kann auf den Server. Stelle auch sicher, dass die PHP Dateien keine schlupfl&#246;cher haben, in die man per Parameter z.B. Code hinzuf&#252;gen kann.
     
  3. AH1988

    AH1988 Guest

    Wann werden Variablen denn geparst?

    Er meint halt das geht auch mit Variablen, ich persönlich kenne es nur von Befehlen wie
    PHP:
    include()
    o.ä.

    Heißt ich bin safe solange ich sowas nicht verwende?
     
  4. salim_aliya

    salim_aliya Halbes Megabyte

    Die include() Anweisung kannst du guten Gewissens verwenden. Solange dieser fest Vergeben ist und z.B. durch Parameter extern nicht beeinflussbar ist, kann dein Angreifer keinen Code klauen. Bei der include Anweisung wird zudem das importierte geparst. Bringt also sowieso nichts.

    Ich bin mir zudem ziemlich sicher, dass Variablen Inhalte nicht geparst werden. Du kannst es aber selbst einmal probieren, indem du als Nickname den Code deines freundes eingibst und guckst, was der tut. Stat "xxx.php" musst du aber eine existierende PHP Datei angeben.
     
  5. AH1988

    AH1988 Guest

    Habs mal probiert.

    Nur der Code wird nicht ausgeführt, wenn ich es in php-Tags setze verschwindet er einfach und es wird nichts angezeigt.

    D.h. irgendwie wird die Eingabe doch geparst.

    Also hier wird der Inhalt so wie er da steht angezeigt:
    PHP:
    $inhalt file_get_contents('xxx.php'); highlight_string($inhalt);  
    Hier verschwindet der Inhalt:
    PHP:
    <?php $inhalt file_get_contents('xxx.php'); highlight_string($inhalt);  ?>
    Und hier wird nur angezeigt was nicht innerhalb der php-Tags liegt:
    PHP:
    Test <?php $inhalt file_get_contents('xxx.php'); highlight_string($inhalt);  ?>

    Heißt in irgendeiner Form wird das ja doch geparst, oder? Sonst würde er die Tags ja einfach mit anzeigen.
     
  6. salim_aliya

    salim_aliya Halbes Megabyte

    Parsen bedeutet auch, dass der Code aktiv ausgeführt wird. Es ist mir zwar auch ein Rätsel, wieso der Code plötzlich nicht da ist, aber ich habe eine Idee:

    Ich vermute, sie wird doch angezeigt, nur können wir sie so nicht sehen. Tippr wieder den Code in Tags ein und öffne dann nach ausführen den Quelltext. Wenn meine Vermutung richtig ist, müsste sie dort quasi als Kommentar stehen.
     
Thread Status:
Not open for further replies.

Share This Page