Kommentarfunktion, welche Zeichen maskieren (Sicherheitsaspekte)

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

  • Kommentarfunktion, welche Zeichen maskieren (Sicherheitsaspekte)

    Hallo,

    Ich möchte gerne eine Kommentarfunktion auf einer Seite Implementieren. Das Kommentar wird dann in einer MySQL Tabelle gespeichert.

    Jetzt überlege ich, welche Zeichen ich "maskieren" sollte um keine Sicherheitslücke zu bieten.

    An sich müsste es doch reichen die < und > auszutauschen oder?

  • #2
    Re: Kommentarfunktion, welche Zeichen maskieren (Sicherheitsaspekte)

    htmlspecialchars, und gut.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Kommentarfunktion, welche Zeichen maskieren (Sicherheitsaspekte)

      Original geschrieben von Laire
      [B]Hallo,

      Ich möchte gerne eine Kommentarfunktion auf einer Seite Implementieren. Das Kommentar wird dann in einer MySQL Tabelle gespeichert.

      Jetzt überlege ich, welche Zeichen ich "maskieren" sollte um keine Sicherheitslücke zu bieten.
      Gar keine -- benutze die datenbankspezifische "Escape"-Funktion. In deinem Fall höchstwahrscheinlich mysql_real_escape_string(). Besser ist natürlich das Verwenden eines MySQL-Treibers, der parametrisierte Queries unterstützt und dir das "Escapen" abnimmt.

      An sich müsste es doch reichen die < und > auszutauschen oder?
      Um diese Zeichen musst du dir erst Gedanken machen, wenn du die Inhalte deiner Datensätze an den Browser schickst. Zusätzlich zu '<' und '>' solltest du dann mindestens noch '&' maskieren, denn das wird benötigt, um '<' und '>' in '&lt;' und '&gt;' umzuwandeln. Die "Quote"-Zeichen '"' und ''' zu maskieren, ist auch keine schlechte Idee. Das alles kann das schon erwähnte htmlspecialchars().

      Wichtig: ALLE auszugebenden Texte[1] müssen entsprechend maskiert werden (und nicht nur der Kommentartext, den du aus der <texarea> geklaubt hast). Ermöglichst du bspw. deinen Kommentatoren einen "Homepage-Link" (oder sonst irgendeine(n) URL) anzugeben, dann musst du auch diese vor der Ausgabe mit htmlspecialchars() behandeln:

      PHP-Code:
      // ...
      echo 'Homepage: ',
      echo 
      '<a href="'htmlspecialchars($url), '">'htmspecialchars($url), '</a>';
      // ... 
      Und wo wir gerade bei Links sind:
      Code:
      <a href="javascript: ...">
      ist sicher auch nichts, was du dir von Wildfremden auf deine Web-Seiten schreiben lassen willst.
      Hier hilft dir htmlspecialchars() nicht weiter, da musst du selbst ran und unzulässige Eingaben ausfiltern.

      --
      [1] Wenn sie nicht gerade selbst HTML darstellen sollen ...
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        mehr Sicherheit

        PHP-Code:

        Hier hilft dir htmlspecialchars
        () nicht weiterda musst du selbst ran und unzulässige Eingaben ausfiltern.

        <
        a href="java script: ..."
        Hat das was mit Cross-Site-Scripting zu tun?

        Wie könnte man das filtern ???
        fotos :

        http://www.flickr.com/photos/rassloff/collections/

        Kommentar


        • #5
          für so was gibt es scripte, wie zum beispiel safehtml. damit kann man mögliche xss-attacken abwehren.

          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Re: mehr Sicherheit

            Original geschrieben von rossixx
            ...
            Hier hilft dir htmlspecialchars() nicht weiter, da musst du selbst ran und unzulässige Eingaben ausfiltern.

            <a href="javascript: ...">
            Interessant: Dass hier "java script" statt des von mir eingegebenen "javascript" steht, sagt mir, dass diese Boardsoftware auf krude Art versucht, genau dieses Problem zu entschärfen.

            Hat das was mit Cross-Site-Scripting zu tun?
            Möglich. Aber ich würde hier eher von Code-Injection sprechen, weil der Script-Code ja direkt von deiner Site aus ausgeführt wird. Cross-Site-Scripting steht für Scripts, die von fremden Servern im Kontext deiner Site ausgeführt werden können.

            Wie könnte man das filtern ???
            Indem du nur dir genehme Daten durchlässt und alle anderen abweist. Für den speziellen Fall:

            PHP-Code:
            // User-Eingaben prüfen
            // für "Homepage-Link"
            if (!preg_match('/\Ahttp:\/\//'$input_url))) {
              
            // Fehlermeldung und Formular nochmal neu anzeigen
              // ...

            Es kann auch nützlich sein, hier zu prüfen, ob $input_url ueberhaupt eine gültige URL darstellt. PHP > 5.2 hat für sowas die Filter-Erweiterung.

            PHP-Code:
            //...
            // Ausgabe
            echo '<a href="'htmlspecialchars($input_url), '">'htmlspecialchars($input_url), '</a>'
            Zuletzt geändert von fireweasel; 23.03.2009, 20:37.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              also ich benutzer einfach immer:

              PHP-Code:
              mysql_real_escape_string(strip_tags($variabel)) 
              reicht das nicht?

              Kommentar


              • #8
                Warum strip_tags? Ich will doch HTML in meinem CMS verwenden können...
                Eingabe: escape-Methode der Datenbank verwenden oder einfach PDO mit PreparedStatement.
                Ausgabe: htmlspecialchars

                Kommentar

                Lädt...
                X