Ankündigung

Einklappen
Keine Ankündigung bisher.

Interpretationsfreie Variablen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Interpretationsfreie Variablen

    Hi leute,
    ich arbeite momentan an einem CMS und möchte ne modulverwaltung einrichten.
    Jetzt habe ich aber das Problem das der PHP code, der in einer variable gespeichert wird interpretiert wird, sobald ich den PHP-Code des neuen Moduls in die Datenbank eintragen möchte.(Zeile:12-14)
    PHP-Code:
    <?php
    if($_POST['id'] != '')
    {
    $name $_POST['name'];
    $code htmlspecialchars($_POST['code']);
    $icon $_POST['icon'];
    $id $_POST['id'];
    $aendern "UPDATE hcms_module Set
    name = '
    $name' WHERE id = '$id'";
    $update mysql_query($aendern);

    $aendern "UPDATE hcms_module Set code = '".$code."'
     WHERE id = '
    $id'";
    $update mysql_query($aendern);

    $aendern "UPDATE hcms_module Set icon = '$icon'
     WHERE id = '
    $id'";
    $update mysql_query($aendern);

    echo 
    '<div style="border: 1px solid darkgreen; width: 200; background-color: limegreen; text-align: left;"><b>Änderungen gespeichert!</b></div>';
    }
    if(
    $_GET['aktion'] == 'add')
    {
    $first 'echo "Bitte PHP-Script einfügen!";';
    $eintrag "INSERT INTO hcms_module
    (name, icon, code)

    VALUES
    ('Neues Modul', 'folder.png', '
    $first')";

    $eintragen mysql_query($eintrag);
    echo 
    '<div style="border: 1px solid darkgreen; width: 250; background-color: limegreen; text-align: left;"><b>Ein neues Modul wurde angelegt!</b></div>';
    }
    if(
    $_GET['aktion'] == 'del')
    {
    $id $_GET['id'];
    $loeschen "DELETE FROM `hcms_module` WHERE `hcms_module`.`id` =".$id;
    $loesch mysql_query($loeschen);

    echo 
    '<div style="border: 1px solid darkgreen; width: 250; background-color: limegreen; text-align: left;"><b>Das Modul wurde gelöscht!</b></div>';
    }
    if(
    $_GET['aktion'] == 'edit')
    {
    $id $_GET['id'];
    $abfrage "SELECT * FROM hcms_module WHERE id = '$id'";
    $ergebnis mysql_query($abfrage);
    $infos mysql_fetch_array($ergebnis);
    echo 
    '<form action="" method="post">
    Name:<input type="text" name="name" value="'
    .$infos['name'].'"><input type="hidden" name="id" value="'.$id.'"><br>
    Icon:<input type="text" name="icon" value="'
    .$infos['icon'].'"><br>
    Script:<br><textarea cols="55" rows="10" name="code">'
    .htmlspecialchars($infos['code']).'</textarea>
    <input type="submit" value="Speichern">&nbsp;<input type="reset" value="Zurücksetzen">
    </form>
    '
    ;
    }
    $abfrage "SELECT * FROM hcms_module";
    $ergebnis mysql_query($abfrage);
    $schleife 0;
    echo 
    '<a href="admin.php?modul='.$_GET["modul"].'&aktion=add">Neues Modul hinzufügen!</a>';
    echo 
    '<table border="0"><tr><td><b>#</b></td><td><b>Name</b></td><td><b>Aktion</b></td></tr>';
    while(
    $row mysql_fetch_object($ergebnis))
       {
    echo 
    '<tr><td>'.$row->id.'</td>
    <td>'
    .$row->name.'</td>
    <td><a href="admin.php?modul='
    .$_GET["modul"].'&aktion=edit&id='.$row->id.'">[E]</a>
    <a href="admin.php?modul='
    .$_GET["modul"].'&aktion=del&id='.$row->id.'">[X]</a></td>';
    $schleife++;
    }
    ?>
    Wie kann ich verhindern, dass die variable interpretiert wird?

  • #2
    Hi.

    Welche beiden Zeilen genau? Abzählen ist nicht so mein Ding, sorry! Welche Variable wird wie "interpretiert"?

    Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Vorneweg: Du solltest den Code escapen und nicht htmlspecialchars darauf anwenden, wenn er in die DB soll.

      Kommentar


      • #4
        Es geht um $code, der wird relativ weit oben in die db eingetragen.

        Was ist escapen?

        Kommentar


        • #5
          PHP: mysql_escape_string - Manual

          Und wo wird die Variable $code wie interpretiert??

          Wolf29
          while (!asleep()) sheep++;

          Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

          Kommentar


          • #6
            z.B. mysql_real_escape_string()

            Dann wird aus " > \"
            und aus ' wird \'


            Kommentar


            • #7
              Dann wird doch trotzdem nichts ausgeführt.

              Kommentar


              • #8
                genau, wie gesagt es soll ne Modulverwaltung werden, wenn nun alle " und ' in /" und /' ausgetauscht werden, müsse sie wenn sie ausgeführt werden sollen wieder in " und ' umgewandelt werden. Aber was passiert, wenn in dem script auch ohne umwandlungen ein /" oder ein /' vorkommt? Dann geht das Script kaputt. Hab mir überlegt am anfang ein /* und am ende ein */ zu setzen, ob das funktioniert?

                Kommentar


                • #9
                  z.B. mysql_real_escape_string()

                  Dann wird aus " > \"
                  und aus ' wird \'
                  Diese Aussage ist falsch. mysql_real_escape_string tut nur ggf. eine für die Query nötige Ersetzung. In der Datenbank wird nichts escaped sein. Das ist der Sinn von real_escape.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Diese Aussage ist falsch. mysql_real_escape_string tut nur ggf. eine für die Query nötige Ersetzung. In der Datenbank wird nichts escaped sein. Das ist der Sinn von real_escape.
                    Ich meinte ja auch nicht, dass das dann so in der Datenbank steht.


                    Kommentar


                    • #11
                      Entscheidend ist, was man sagt, nicht was man meint.
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar

                      Lädt...
                      X