kostenloser Webspace werbefrei: lima-city


Php: Code aus Variable ausfürhen und anzeigen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    darvin

    darvin hat kostenlosen Webspace.

    Hallo Community,
    wieder melde ich micht bei euch, wegen eines Projektes dessen Umsetzung von mir nicht machbar ist.
    Habe bereits gegoogelt, doch bin auf kein Ergebnis gestoßen, welches ich verstehe.
    Ich möchte, dass Code, welchen man in ein Textfeld eintippt und welcher dann als Variable gespeichert wird, in der Website ausgeführt wird.
    Habe im Internet "eval()" gefunden, welches den code allerdings zwar ausblendet aber ihn nicht ausführt.
    Danke für eure Hilfen.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. fabianschwarz

    fabianschwarz hat kostenlosen Webspace.

    Hallo Darvin,

    bei eval() wird der Code sofern korrekt implementiert schon ausgeführt (siehe PHP manual http://www.php.net/manual/de/function.eval.php). Kannst du deinen Code hier reinstellen?

    Grüße
    Fabian
  4. h***********r

    Das ist so das schlechteste was man freiwillig machen können könnte. Sicherheitstechnisch ist das eine absolute Katastrophe.

    An sich geht das aber mit Abfangen -> Auswerten -> Ausführen

    Je nachdem welche Code Sprache du verwenden möchtest musst du die Methode zum ausführen wählen.
    Da gibt es einen ganzen Stapel an Möglichkeiten:
    exec()
    shell_exec()
    system()
    proc_open()
    und noch verschiedene Workarounds die man sich da einfallen lassen kann.

    Aber ohne Ahnung wie man das System 'SICHER' baut, lass es lieber.

    Beitrag zuletzt geändert: 20.3.2018 18:30:40 von horstexplorer
  5. Autor dieses Themas

    darvin

    darvin hat kostenlosen Webspace.

    Hallo, Danke für eure Antworten.
    Habe hier meinen Code:
    <?php
        if (isset($_POST['submit'])) {
            start();
        }
      
        function start(){
            $eingegebenercode = $_POST["eingegebenercode"];
            eval ("\$eingegebenercode = \"$eingegebenercode\";");
            echo "$eingegebenercode";
        }
    ?>


    Wenn ich einen Text eingebe und das "<?php" und "?>" weglasse, wird der text angezeigt. Wenn ich innerhalb der PhP Klammern etwas wie z.B "echo "Hallo Lima-City";" schreibe, funktioniert es nicht.

    Zur Sicherheit: Was kann denn im schlimmsten Fall passieren?

    Die Website:
    https://tools.de.cool/code-executer/

    Beitrag zuletzt geändert: 20.3.2018 20:18:35 von darvin
  6. h***********r

    Zur Sicherheit: Was kann denn im schlimmsten Fall passieren?

    Alles. Man könnte deine Datenbanken leeren, den Webspace löschen und übernehmen und theoretisch mit exec etc auch das ganze System dir abnehmen. Wenn du Pech hast ist auch noch mehr weg wenn du irgendwo Passwörter hast.
    Und dein Ansatz sieht so aus wie Sicherheit -100% wenn das funktionieren würde.

    Zudem sieht es so aus als würdest du eval() nicht verstehen oder hättest du die Doku nicht gelesen.

    Beitrag zuletzt geändert: 20.3.2018 20:38:38 von horstexplorer
  7. fabianschwarz

    fabianschwarz hat kostenlosen Webspace.

    darvin schrieb:
    Wenn ich einen Text eingebe und das "<?php" und "?>" weglasse, wird der text angezeigt. Wenn ich innerhalb der PhP Klammern etwas wie z.B "echo "Hallo Lima-City";" schreibe, funktioniert es nicht.


    Erstes Problem: Für eval() darf der Code nicht in PHP Tags eingeschlossen sein. Steht übrigens auf deutsch und gut verständlich im Manual ;) Daher mit Tags keine Funktion (bzw. ein vermutlich nicht angezeigter Fehler).

    Zweites Problem (daher die Ausgabe des Codes, wenn die Tags weggelassen werden): Du kannst einer Variablen kein Code zuweisen, sodass er bei der Zuweisung ausgeführt würde. Er wird hier einfach zugewiesen und wieder ausgegeben. eval() führt den Code direkt aus, also musst du gar nichts tun, eventuelle Ausgaben des Codes (echo etc) werden so auch ausgegeben, wie als stünde der Code fest in deinem Skript.


    Verbesserter Code (ungeprüft):
    <?php
        if (isset($_POST['submit'])) {
            start();
        }
      
        function start(){
            $eingegebenercode = $_POST["eingegebenercode"]; // ohne Tags eingeben!
            eval ($eingegebenercode); // Ausgabe als ob der Code hier fest drin stünde
        }
    ?>


    Auch nochmal von mir der Hinweis: Sicher ist das so nicht!
  8. Hallo darvin,

    grundsätzlich eval is evil und sollte vermieden werden.
    siehe auch:http://php.net/manual/de/function.eval.php

    Auch andere Konstrukte, die einem User gestatten ausführbaren Code zum Server zu schicken, solltest du nicht in Betracht ziehen.

    Mit readfile lade ich mir Dateien von deinem Webspace.
    Ein Dateiupload ist ein Kinderspiel.

    Also lass das, wenn du Herr deiner eigenen Webseiten bleiben willst.
  9. h***********r

    timebandit schrieb:
    Hallo darvin,

    grundsätzlich eval is evil und sollte vermieden werden.
    siehe auch:http://php.net/manual/de/function.eval.php

    Auch andere Konstrukte, die einem User gestatten ausführbaren Code zum Server zu schicken, solltest du nicht in Betracht ziehen.

    Mit readfile lade ich mir Dateien von deinem Webspace.
    Ein Dateiupload ist ein Kinderspiel.

    Also lass das, wenn du Herr deiner eigenen Webseiten bleiben willst.

    Nun ja ganz so evil ist es nicht. Aber dafür bräuchte man root um entsprechende Funktionen von PhP zu deaktivieren, damit es nicht in einer oder mehreren Katastropen endet. Das ist hier nicht gegeben ( man müsste die Funktionen aus dem Code erst Filtern und entfernen, aber auch das ist nicht so sicher ). Oder noch besser es führt den Code in irgendeiner Sandbox aus.

    Aber wie bereits gesagt das ganze auf Lima, und ohne Kenntnisse was alles Schaden anrichten könnte aufzusetzen sollte man lassen. Das ist was für lokale Testserver und gehört nicht ans Netz.

  10. horstexplorer schrieb:

    Nun ja ganz so evil ist es nicht.

    Das ist deine Meinung. Ich bleibe bei meiner Behauptung.

    horstexplorer schrieb:
    Aber dafür bräuchte man root um entsprechende Funktionen von PhP zu deaktivieren,

    Für was braucht man hier root-rechte?
    readfile funktioniert ohne root.
    Verzeichnis auslesen funktioniert ohne root
    Falls Dateien noch Zugangsdaten in Klartext liefern, dann rollt eine Lawine.
    horstexplorer schrieb:
    Aber wie bereits gesagt das ganze auf Lima, und ohne Kenntnisse was alles Schaden anrichten könnte aufzusetzen sollte man lassen. Das ist was für lokale Testserver und gehört nicht ans Netz.

    Da stimme ich dir uneingeschränkt zu.
  11. h***********r

    Für was braucht man hier root-rechte? readfile funktioniert ohne root.

    Das deaktivieren von Funktionen hat nichts mit readfile zu tun. Man würde über disable_functions alles was 'gefährlich' ist deaktivieren können. Dafür benötigt man natürlich eine .ini Datei welche von php geladen wird. Ich weiß nicht wie das auf Lima aussieht ob diese Dateien im Webroot erkannt werden. Sonnst müsste man sie ja in das Verzeichnis von PhP legen bzw den Pfad umkonfigurieren. Kann aber natürlich sein, dass hier keine root Rechte benötigt werden und das ganze unter Lima funktioniert. Dann könnte man das schon ohne großen Aufwand auf 'sicher' umbauen.

    Weiß ned ob man auch openbasedir konfigurieren muss. Hab mir das nicht angesehen.

    Beitrag zuletzt geändert: 21.3.2018 21:02:49 von horstexplorer
  12. horstexplorer schrieb:
    Für was braucht man hier root-rechte? readfile funktioniert ohne root.

    Das deaktivieren von Funktionen hat nichts mit readfile zu tun. Man würde über disable_functions alles was 'gefährlich' ist deaktivieren können. Dafür benötigt man natürlich eine .ini Datei welche von php geladen wird. Ich weiß nicht wie das auf Lima aussieht ob diese Dateien im Webroot erkannt werden. Sonnst müsste man sie ja in das Verzeichnis von PhP legen bzw den Pfad umkonfigurieren. Kann aber natürlich sein, dass hier keine root Rechte benötigt werden und das ganze unter Lima funktioniert. Dann könnte man das schon ohne großen Aufwand auf 'sicher' umbauen.

    Weiß ned ob man auch openbasedir konfigurieren muss. Hab mir das nicht angesehen.

    Deine Antwort ist voller Konjunktive.
    Zur Erhellung dienen
    phpinfo(); zeigt dir die Konfiguration auf z.B. Lima
    ini_get();
    ini_set();
    Ich glaube zum Thema ist inzwischen so ziemlich alles gesagt. Ich bin raus.
  13. h***********r

    timebandit Deine Antwort ist voller Konjunktive.

    Diese werden eingesetzt wenn man vorher nicht nachsieht was läuft und was nicht. Es geht ja auch nur um Möglichkeiten wie man es machen könnte. Das Überprüfen ob das machbar ist soll der der es Umsetzen möchte, sonst wäre das ja zu einfach ;)

    Verdammt nun habe ich doch noch nachgesehen.
    Es scheinen keine weiteren .ini Dateien geladen zu werden (zumindest nicht im Free Paket mit PhP5; ini_set kann nicht genutzt werden um disable_functions zu verändern). Somit fällt Lima weg. Jetzt kann man aber auch auf die Idee kommen das ganze auch noch auf einem VServer auf zu setzen um diese Konfigurationsmöglichkeiten zu haben, aber dann ist nicht nur der Webspace bei Fehlern weg sondern gleich der ganze Server. Ein Spaß für alle beteiligten :wall:
    Da gilt ja dann gleich doppelt nicht machen.



    Beitrag zuletzt geändert: 21.3.2018 21:57:24 von horstexplorer
  14. Autor dieses Themas

    darvin

    darvin hat kostenlosen Webspace.

    Hallo Leute.
    Vielen vielen Dank für Eure Hilfe!

    Habe es jetzt Hinbekommen und meine PhP Skills erweitert. Arbeite jetzt immer fleißiger daran, PHP zu lernen.

    Zur Sicherheit: Es ist echt heftig, dass das so unsicher ist. Der Angreifer kann dann ja ganz einfach jeglichen Schadcode ausführen...
    Werde das dann jetzt auch wieder entfernen, um im sicheren Bereich zu bleiben.
  15. 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!