Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] was macht $where_form_is

Einklappen

Neue Werbung 2019

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

  • [Erledigt] was macht $where_form_is

    hallo.

    kann mir jemand genau erklären was
    PHP-Code:
    $where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/")); 
    macht?
    es stammt aus einer vorlage das eine mail versendet und in die datenbank schreibt. in keiner beschriebung von mail u. datenbank - php kommt das vor, ich finde nichts, braucht es das überhaupt??

  • #2
    Genau kann das keiner erklären, da die Codezeile unbekannte Variablen enthält. Es wird vermutlich versucht, den eigenen URL-Path zu ermitteln. Die Benutzung von $HTTP_SERVER_VARS deutet darauf hin, das dein Script schon etwas älter ist. Ob dies wirklich benötigt wird, kann aufgrund der dürftgen Informationslage nicht beantwortet werden.

    Kommentar


    • #3
      nun ... im Grunde generiert die diese Zeile einfach die URL, welche die Email gesendet hat ...

      die URL beginnt zunächst mit "http", dann prüft das Script, ob die Seite per http oder https aufgerufen wurde und bastelt das "s" hinein, dann folgt "://" und dahinter dann folgt erstmal der Server-Name ... zusammen mit dem Scriptnamen aus $PHP_SELF

      allerdings ist das ganze Script wohl noch aus PHP 4 zeiten mit register_globals auf "on" ... $SERVER_NAME sollte wohl eher $_SERVER["SERVER_NAME"] heißen ...ebenso $PHP_SELF -> $_SERVER["PHP_SELF"] ...

      und der letzte Teil verwendet einen kleinen Taschenspieler-Trick, um eventuelle Unterverzeichnisse zu erfassen

      zuerst dreht er $PHP_SELF um (Zeichen für Zeichen, die exakt umgekehrte Reihenfolge) , dann wird mittels strstr das erste "/" gesucht - damit springt man exakt hinter den Script-Namen .. dann wird die Zeichenreihenfolge ab dort ausgeschnitten und mit dem "äußeren" strrev wieder umgedreht

      letztlich ist das ganze Taschenspielerei, denn es deutet auf den Einsatz der Mail-Funktion hin ... also mal entrümpeln, auf PHP 5 updaten und am besten mit einer aktuellen Mail-Klasse lösen

      Kommentar


      • #4
        PHP-Code:
        echo $where_form_is
        klärt ebenfalls

        Kommentar


        • #5
          danke der raschen antworten.
          habe schon über mail-klassen gelesen, meinte aber für ein simples info-mail geht mail() ganz in ordnung.
          $where_form_is kommt im ganzen script sonst nie vor, darum habe ich gedacht vielleicht ist es ein ausdruck der vergeben ist eine art globale variable und irgendwie vom system benötigt wird. den rest vom script kann ich nachvollziehen, da macht alles sinn. warum die zeile drin steht, ist mir immer noch nicht klar. ein formular nimmt daten entgegen und diese daten werden per mail versendet. liegt alles auf dem selben server, url, domain ändert nicht, brauch ich nicht abzufragen.
          @kurty das ist gut, genauso wie das script ohne die zeile laufen zu lassen.
          hab ich inzwischen mich getraut, und es läuft einwandfrei.
          der taschenspielertrick bringt mich sehr viel weiter, lernerfolg!
          php ist eine schöne und zweckmässige sprache.
          ihr seid super!

          Kommentar


          • #6
            Zitat von beliar284 Beitrag anzeigen
            und der letzte Teil verwendet einen kleinen Taschenspieler-Trick, um eventuelle Unterverzeichnisse zu erfassen

            zuerst dreht er $PHP_SELF um (Zeichen für Zeichen, die exakt umgekehrte Reihenfolge) , dann wird mittels strstr das erste "/" gesucht - damit springt man exakt hinter den Script-Namen .. dann wird die Zeichenreihenfolge ab dort ausgeschnitten und mit dem "äußeren" strrev wieder umgedreht
            Also das selbe, was man mit [man]basename[/man]($_SERVER['SCRIPT_NAME']) erreicht hätte. Und zwar, ohne sich die XSS-Verwundbarkeit von PHP_SELF ins Haus zu holen.

            Kommentar


            • #7
              Mit dem 'Taschenspieler-Trick' holt er sich:
              PHP-Code:
              dirname($_SERVER['SCRIPT_NAME']); 
              Sonst stimme ich fab zu, die Tricks sind nicht notwendig, dafür gibt es funktionen.

              Kommentar

              Lädt...
              X