Christian: Bedingung aus Variablen zusammenbasteln?

'n Abend!

(Wie) ist es möglich, eine if-Bedingung variabel zu belassen?

Also ich hab mir sowas gedacht:

$grenze = "< 7";

und dann in einer funktion:

function beispiel ($grenze, $etc = "belanglos") {
    if ($zahl .$grenze) {
        $whatever = $etc;
    }
}

So geht's aber nicht.

Gruß
Christian

  1. hi,

    (Wie) ist es möglich, eine if-Bedingung variabel zu belassen?

    Also ich hab mir sowas gedacht:
    $grenze = "< 7";
        if ($zahl .$grenze) {

    das ginge höchstens per eval() - was aber bekanntlich evil ist.

    besser wäre es, wenn du dir für solche einen eigenen kleinen parser schreibst, der den "operator" extrahiert, und davon abhängig einen größer/kleiner/wasauchimmer-vergleich durchführt.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi wahsaga,

      besser wäre es, wenn du dir für solche einen eigenen kleinen parser schreibst, der den "operator" extrahiert, und davon abhängig einen größer/kleiner/wasauchimmer-vergleich durchführt.

      Ja, aber der Aufwand wäre größer, weil $grenze auch sowas wie "< 7 || $zahl > 14 && != 28" sein können sollen darf ;)

      Ich schau mir mal an, was eval() genau ist.

      Gruß
      Christian

      1. Korrektur:
        Nein, so soll $grenze natürlich nicht sein dürfen. ;)

        Ist eval auch böse, wenn ich die Variablen sicher fehlerfrei (also nur selber eingegeben und auf Funktion geprüft) sind?

        Grüße
        Christian

        1. Hallo Freunde des gehobenen Forumsgenusses,

          Ist eval auch böse, wenn ich die Variablen sicher fehlerfrei (also nur selber eingegeben und auf Funktion geprüft) sind?

          Wenn sie das wirklich sind: Nein.

          Gruß
          Alexander Brock

          --
          SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
          http://againsttcpa.com
        2. echo $begrüßung;

          Ist eval auch böse, wenn ich die Variablen sicher fehlerfrei (also nur selber eingegeben und auf Funktion geprüft) sind?

          eval() ist genauso "böse" wie jedes andere Werkzeug "böse" sein kann. Unsachgemäßer Gebrauch, absichtlich oder versehentlich, zugelassen oder nur nicht richtig abgesichert, kann zu Schäden führen.

          echo "$verabschiedung $name";

          1. hi dedlfix,

            eval() ist genauso "böse" wie jedes andere Werkzeug "böse" sein kann. Unsachgemäßer Gebrauch, absichtlich oder versehentlich, zugelassen oder nur nicht richtig abgesichert, kann zu Schäden führen.

            Schäden?
            Ich kann mir nicht vorstellen, dass ein "Schaden" entstehen kann, weil eval() bei mir überhaupt nicht mit einer Datenbank oder sowas in verbindung steht...
            eine Fehlermeldung könnte auftreten und das Skript abbrechen, aber sonst?

            cya
            Christian

            1. echo $begrüßung;

              Schäden?
              Ich kann mir nicht vorstellen, dass ein "Schaden" entstehen kann, weil eval() bei mir überhaupt nicht mit einer Datenbank oder sowas in verbindung steht...

              Das eval steht erstmal mit nichts in Verbindung. Es versucht einfach nur den übergebenen String als PHP-Code zu interpretieren und auszuführen.

              eine Fehlermeldung könnte auftreten und das Skript abbrechen, aber sonst?

              Wenn es also jemandem gelingt mit deinem eval beliebigen gültigen PHP-Code zur Ausführung zu bringen, dann kann derjenige alles machen, was du auch mit einem eigenen PHP-Script anstellen könntest: Lesen deiner und ggf. fremder Dateien, Mails von deinem Server aus versenden, Datenbankzugriff, wenn er die Zugangsdaten dazu findet, etc. pp.

              echo "$verabschiedung $name";

              1. Hallo dedlfix

                Wenn es also jemandem gelingt mit deinem eval beliebigen gültigen PHP-Code zur Ausführung zu bringen, dann kann derjenige alles machen, was du auch mit einem eigenen PHP-Script anstellen könntest: Lesen deiner und ggf. fremder Dateien, Mails von deinem Server aus versenden, Datenbankzugriff, wenn er die Zugangsdaten dazu findet, etc. pp.

                Aaaachso! Jetzt begreif ich! Danke für den Klartext!
                Na das wäre natürlich richtig evil! xD

                Das kann aber bei meiner Verwendung nur passieren, wenn derjenige eh meine PHP-Dateien ändern kann.

                Aber über sowas muss man sich natürlich bewusst sein, wenn man's verwendet!

                Gute Nacht!
                Christian

            2. Moin!

              eine Fehlermeldung könnte auftreten und das Skript abbrechen, aber sonst?

              Es könnte jemand nach eigenem Belieben:

              • Dateien lesen oder schreiben
              • Code ausführen

              Beispiel?

              eval bolTest=(rm -rf \*==0)

              Löscht zuverlässig den Verzeichnisinhalt, wenn der Benutzer mit dessen Rechten der Webserver gerade läuft, das darf.

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  2. echo $begrüßung;

    (Wie) ist es möglich, eine if-Bedingung variabel zu belassen?

    Wenn du nicht einen eigenen Parser schreiben willst, könntest du dir eval() ansehen. (Beachte, dass ungeprüfte Usereingaben durch eval() zu schicken Unheil anrichten kann.)

    echo "$verabschiedung $name";