Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Verbotene Zeichen in Requests

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Verbotene Zeichen in Requests

    Ich arbeite derzeit an einem Online-Filemanager. Bis jetzt habe ich für mich die Frage noch offen gelassen, welche Zeichen ich für $_POST-Requests verbieten muss. Im System werden Pfadangaben zu Dateien, z.B. zum Umbennen, momentan direkt verwendet. Jeder einzelne Benutzer des File-Managers besitzt seinen Eigenen Ordner und nur darin darf er herumwerkeln. Jetzt geht es darum die Requests via preg_replace() zu validieren. Dabei ist mir bekannt, dass ich auf jeden Fall "./" und "../" aus dem String nehmen muss.

    Nun die Frage, welche Zeichen wären noch wichtig, die den Code manipulieren könnten und dem Benutzer Zugriff auf Dateien gewähren auf die er nicht zugreifen soll.

    Desweiteren die Frage, welche Zeichen sollte ich beim Erstellen einer neuen Datei verbieten? Ich habe schon ausprobiert, welche Zeichen ich für die Dateien auf dem Webserver nutzen kann, nun denke ich aber dass es auch Unterschiede je nach Server gibt, welche Zeichen in Dateinamen unterstützt werden. Gibt es irgendwo eine Übersicht darüber welche Zeic hen ich dafür verwenden sollte?

    Und noch eine dritte Frage am Rande: Ist es möglich mittels $_POST-Eingaben den PHP-Code zu unterbrechen und etwas einzuschleusen, oder hat PHP da schon von Haus aus was dagegen?


  • #2
    Vergib doch einfach die Dateinahmen neu, dann kann keiner böse Zeichen einschmuggeln.
    Du solltest aufpassen dass keiner eine .php Datei hochlädt und die dann ausführt...

    Zu 3tens: Nein, es sei denn du machst mit den Eingaben eval, oder führst ihn anderweitig uas.
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Und angenommen, ich fische mit preg_replace() ein paar Zeichen raus und binde es so in ein echo() ein?

      Vergib doch einfach die Dateinahmen neu, dann kann keiner böse Zeichen einschmuggeln.
      Wie meinst du das? Der Benutzer darf festlegen, wie die neue Datei heißen soll, deshalb muss ich die Eingabe validieren und dazu wissen, welche Zeichen ich erlauben darf.

      Kommentar


      • #4
        Vergib doch einfach die Dateinahmen neu, dann kann keiner böse Zeichen einschmuggeln.
        Das meine ich für hochgeladene Dateien.

        Also ich persönlich würde nur 0-9A-Za-z-_ zulassen und den kompletten Rest ausschließen.
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          0-9 und a-z (groß und klein), evtl. noch - und _, jedoch sollte man mehr nicht verfügbar machen...

          Kommentar


          • #6
            Und wie schaut es aus mit äöüá

            Kommentar


            • #7
              Kannst du, musst du aber nicht...
              Signatur:
              PHP-Code:
              $s '0048656c6c6f20576f726c64';
              while(
              $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

              Kommentar


              • #8
                Hmm... kam irgendwie nur der halbe Post an. Meine Frage war, ob diese Sonderzeichen auf allen Systemen in Dateinamen zugelassen sind.

                Kommentar


                • #9
                  Nein - dafür gibt es urlencode(); (um die datei per url aufzurufen) - jedoch kommt es auf dein betriebssystem an, ob du die jeweiligen sonderzeichen benutzen kannst, raten würde ich dir es nicht. (ae, oe, ue, sind genauso gut und damit wirst du weniger probleme haben) - aber das wurde alles schonmal behandelt.. boardsuche und/oder google.de

                  Kommentar


                  • #10
                    gibt es eine möglichkeit, mit php zu testen ob der server diese zeichen unterstützt?

                    Kommentar


                    • #11
                      Vom Webserver reicht, also in der Apache-Konfiguration nachsehen, bzw. phpinfo();.

                      Mit utf-8 solltest du überall gut fahren, ist auf so gut wie jedem betriebssystem vorhanden.

                      siehe AddDefaultCharset. (kannst du per htaccess auch regeln)

                      PS: nicht vergessen: in URLs dürfen keine leerzeichen und sonderzeichen vorhanden sein. wie o.g. urlencode(); !

                      Kommentar

                      Lädt...
                      X