Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Affenformular - htmlentities

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Affenformular - htmlentities

    Hallo zusammen,

    ich habe in letzter Zeit einige Artikel zum Thema Usereingaben validieren/absichern studiert und versuche ein wenig damit zu experimentieren.

    Wenn ich das richtig verstanden habe, ist es wohl üblich Sonderzeichen im Sinne von Umlauten, ', " in der Datenbank unkodiert abzuspeichern wegen erleichterter Suche usw. Ich möchte nach "Müller" suchen und nicht nach "Müller".
    Für die Ausgabe allerdings werden diese Zeichen in Entities umgewandelt.

    Soweit richtig?

    Nun versuche ich ein einfaches Affenformular zu erstellen und die Eingaben dabei vorerst mal nur mit strip_tags und htmlentities abzusichern.
    Nehmen wir an, ein User postet
    Code:
    <b>Test</b> /"> hallo
    nach
    PHP-Code:
    $var htmlentities($varENT_COMPAT'UTF-8');
    $var strip_tags($var); 
    wird daraus
    Code:
    Test /&quot;&gt; hallo
    Soweit alles klar, wird das Formular ausgefüllt nochmals dargestellt weil z.B. irgendein anderes Feld nicht durch die Validierung kommt, schafft der User es nicht aus dem Inputfeld auszubrechen.

    Wenn jetzt aber die Eingabe des anderen Inputfeldes bereinigt wird, bekomme ich ja wieder
    Code:
    Test /&quot;&gt; hallo
    geschickt (vom vorherigen Versuch bereits so vorausgefüllt).
    Nun muss ich also um sicher zu gehen alle geposteten Daten dekodieren um sie in der Form in die DB zu bringen. Nur um sie dann, bei der Ausgabe, wieder zu kodieren.

    Irgendwie erscheint mir das umständlich.

    Hab ich da wo einen Gedankenfehler oder ist das die übliche Art solche Sachen anzupacken?

    Schonmal danke!
    Hilfe, mein Ball ist umgekippt!

  • #2
    Gedankenfehler

    Das Formular enthält im Quelltext zwar so etwas:
    Code:
    <input type="text" value="Test /&quot;&gt; hallo">
    aber abgesendet wird das was du auch im Browser siehst, also

    PHP-Code:
    'Test /"> hallo' 
    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

    Kommentar


    • #3
      Zitat von MaxC Beitrag anzeigen
      Soweit richtig?
      Soweit richtig.

      Nun versuche ich ein einfaches Affenformular zu erstellen und die Eingaben dabei vorerst mal nur mit strip_tags und htmlentities abzusichern.
      strip_tags „sichert“ nichts ab, sondern strip_tags verstümmelt die Daten!

      Nehmen wir an, ein User postet
      Code:
      <b>Test</b> /"> hallo
      Nehmen wir an, hier im Forum würde strip_tags eingesetzt - dann hättest du dieses Beispiel jetzt gar nicht posten können ...!

      Damit sollte klar sein, wie sinnlos strip_tags ist.
      Wenn der Nutzer spitze Klammern oder gar sowas wie „Tags“ posten möchte - dann lass' ihn doch.

      Wenn jetzt aber die Eingabe des anderen Inputfeldes bereinigt wird, bekomme ich ja wieder
      Code:
      Test /&quot;&gt; hallo
      geschickt (vom vorherigen Versuch bereits so vorausgefüllt).
      Nein, bekommst du nicht.
      [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

      Kommentar


      • #4
        @fab
        Interessant. Da hab ich wohl vorhin viel zu kompliziert gedacht. Danke!

        @ChrisB
        hmmm... Verstümmeln? So hab ich das noch nicht gesehen.
        Irgendwie erscheint mir strip_tags in manchen Fällen schon sinnvoll. Wenn ich z.B. ein Namensfeld für ne Registrierung oder ähnlich hab. Da haben doch HTML-Tags eigentlich nichts drinn zu suchen, oder? Wobei man da wahrscheinlich eher in die Richtung "a-Z, 0-9 und Leerzeichen sind erlaubt, andere nicht" geht.

        Zusammengefasst also:
        HTML-Tags erlauben, aber für die Ausgabe kodieren.
        Falls Userinput original angezeigt werden soll, z.B. wenn ich Fett, Kursiv, ... erlauben will, mit Tools wie HTML-Purifier arbeiten, richtig?
        Hilfe, mein Ball ist umgekippt!

        Kommentar


        • #5
          Wenn ich z.B. ein Namensfeld für ne Registrierung oder ähnlich hab. Da haben doch HTML-Tags eigentlich nichts drinn zu suchen, oder?
          Ham sie auch nicht, aber dann sagst du dem User einfach was Sache ist, nämlich dass kein Sonderzeichen a la < und > erlaubt sind und gut ist.
          Und nicht einfach ne Funktion drüberwursteln wo nachher was ganz anderes rauskommt als der User eingegeben hat.

          Falls Userinput original angezeigt werden soll, z.B. wenn ich Fett, Kursiv, ... erlauben will, mit Tools wie HTML-Purifier arbeiten, richtig?
          Ja, oder du benutzt BB-Codes, was aber ungefähr in die gleiche Richtung geht.
          Signatur:
          PHP-Code:
          $s '0048656c6c6f20576f726c64';
          while(
          $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

          Kommentar


          • #6
            Mensch, und ich war so stolz ne Möglichkeit gefunden zu haben das HTML-Zeugs loszuwerden

            Naja, wieder was dazu gelernt.
            Danke euch allen für die Antworten!
            Hilfe, mein Ball ist umgekippt!

            Kommentar


            • #7
              Mensch, und ich war so stolz ne Möglichkeit gefunden zu haben das HTML-Zeugs loszuwerden
              Mit htmlentities wirst du es ja auch los, da es dann einfach als normaler Text ausgegeben wird und man damit nichts mehr böses machen kann.
              Wenn jemand < und > zum formatieren seiner Beiträge verwenden will ist das völlig ok, er darf bloß keinen Schadecode einbauen können.
              Signatur:
              PHP-Code:
              $s '0048656c6c6f20576f726c64';
              while(
              $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

              Kommentar


              • #8
                Ja, ist mir --jetzt-- auch klar.
                War eher ironisch/selbstkritisch gemeint
                Hilfe, mein Ball ist umgekippt!

                Kommentar

                Lädt...
                X