Announcement

Collapse
No announcement yet.

Zeilenumbruch eines Strings im h:outputtext

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeilenumbruch eines Strings im h:outputtext

    Versuche seit längerem einen String "richtig" mit Zeilenumbrüchen in einer hutputtext auszugeben.

    Das Problem:
    In der Datenbank werden die Zeilenumbrüchen anders dargestellt wie auf einer Html Seite.

    Die hutputtexte sind in einer ui:repeat Schleife drinne und stellen Kommentare zu einem Thema dar. Daher will ich nicht in einer Methode jeden Kommentar durchgehen und durch replace die entsprechenden Zeichen verändern.

    Den Escape Tag von JSF find ich fatal, da dadruch javascripte in die Kommentare reingeschrieben werden könne.


    Hoffe jemand kann mir weiterhelfen, bin langsam am verzweifeln.
    Danke im Voraus.

  • #2
    Daher will ich nicht in einer Methode jeden Kommentar durchgehen und durch replace die entsprechenden Zeichen verändern.
    Da HTML die Windows/Linux/MAC Zeilenumbrüche nicht kennt, wird wohl kein anderer Weg bleiben


    Den Escape Tag von JSF find ich fatal, da dadruch javascripte in die Kommentare reingeschrieben werden könne.
    Das verstehe ich nicht
    Christian

    Comment


    • #3
      Den Escape Tag von JSF find ich fatal, da dadruch javascripte in die Kommentare reingeschrieben werden könne.
      Das verstehe ich nicht
      __________________
      Im hutputtext kann ma escape auf false setzen dann, dies bewirkt ja, dass u.a .zeilenumbrüche erkannt werden. Nur wenn man nun eine javascript in das input feld reinschreibt, wird jedesmal wenn der kommentar geladen wird, das script ausgeführt.

      PS:
      Habs nun so gemacht, dass ich die umbrüche als<br/> in der DB speichere, denke ist die gängige Lösung oder?.
      Zuletzt editiert von medium; 29.08.2010, 23:32.

      Comment


      • #4
        Habs nun so gemacht, dass ich die umbrüche als<br/> in der DB speichere, denke ist die gängige Lösung oder?.
        Weniger, da man nicht "die Daten" mit HTML verunreinigen sollte

        Nur wenn man nun eine javascript in das input feld reinschreibt, wird jedesmal wenn der kommentar geladen wird, das script ausgeführt.
        Das ist aber ein Problem der Eingabevalidierung und nicht der Ausgabe
        Christian

        Comment


        • #5
          Habs nun so gemacht, dass ich die umbrüche als<br/> in der DB speichere, denke ist die gängige Lösung oder?.
          Weniger, da man nicht "die Daten" mit HTML verunreinigen sollte
          Hmm, ist es nicht Performance Lastig die ganze Liste (sagen wir ma in der Theorie über 100 Objekten) alle Strings durchzugehen und enstprechende zeichen zu ersetzen?


          Nur wenn man nun eine javascript in das input feld reinschreibt, wird jedesmal wenn der kommentar geladen wird, das script ausgeführt.
          Das ist aber ein Problem der Eingabevalidierung und nicht der Ausgabe
          Ja hatte mir über Sicherheit kaum Gedanken gemacht, arbetie mich grad in SQL Injection und Cross-Site Scripting ein.
          Hat da jemand evtl. gute Tutorials?

          Comment


          • #6
            Hmm, ist es nicht Performance Lastig die ganze Liste (sagen wir ma in der Theorie über 100 Objekten) alle Strings durchzugehen und enstprechende zeichen zu ersetzen?
            Müsste man ausprobieren, m.E. ist es schlimmer "Rohdaten" mit HTML zu versehen. Was passiert, wenn diese mal woanders gebraucht werden?
            Christian

            Comment


            • #7
              Prepared Statements benutzen

              Ja hatte mir über Sicherheit kaum Gedanken gemacht, arbetie mich grad in SQL Injection und Cross-Site Scripting ein.
              Hat da jemand evtl. gute Tutorials?
              Gegen SQL-Injection schützt Du Dich, indem Du nur PreparedStatements benutzt. Da die Queries bei einer normalen Webanwendung vorher definiert sind, solltest Du das auch schon aus Performancegründen machen. Wenn Du nicht direkt jdbc programmierst, sondern ein OR-Mapping Framework wie Hibernate benutzt, brauchst Du dir darum keine Gedanken zu machen.

              Und Cross-Site Scripting: Letztlich läuft es auf eine saubere Validierung aller Eingabewerte hinaus (also Formularfelder und GET-Parameter), bevor diese wieder zur Anzeige gebracht werden.

              Dort, wo es geht, solltest Du gültige Eingabewerte definieren, die ein Einfügen von Schadcode garnicht erst zulassen (sog. Whitelisting). Z.B. Du hast ein Feld zur Eingabe eines Namens. Wenn du nun nur Großbuchstaben, Kleinbuchstaben und das Leerzeichen zulässt, kann kein Schadcode über dieses Feld eingeschleust werden. Das ist die sicherste Methode.

              Dort, wo das nicht möglich ist, musst Du über sog. Blacklisting die Eingabe von schädlichen Zeichen (z.B. "<") unterbinden. Das ist schon deutlich fehleranfälliger als Whitelisting, weil es leicht passiert, dass man schädliche Zeichen vergisst ("<" könnte auch "&lt;" oder mit seinem Unicode-Wert codiert sein).

              Wenn Du in Deiner Webanwendung explizit die Eingabe gefährlicher Zeichen erlauben willst, musst Du sie escapen.

              Als Einstieg in dieses Thema empfehle ich den Wikipedia Artikel Cross-Site Scripting. Dort findest Du auch weiterführende Links.

              Gruß ngomo
              http://www.winfonet.eu

              Comment


              • #8
                &lt;pre&gt;

                Zu Deinem Formatierungsproblem. Vielleicht hilft Dir das html-Tag <pre>. Hier ein Link zur Doku:Pre-Tag auf Selfhtml.
                Gruß ngomo
                http://www.winfonet.eu

                Comment


                • #9
                  Gegen SQL-Injection schützt Du Dich, indem Du nur PreparedStatements benutzt. Da die Queries bei einer normalen Webanwendung vorher definiert sind, solltest Du das auch schon aus Performancegründen machen. Wenn Du nicht direkt jdbc programmierst, sondern ein OR-Mapping Framework wie Hibernate benutzt, brauchst Du dir darum keine Gedanken zu machen.
                  Ja, da bin ich froh, dass dort die größte Last vom Framework übenommen wird.

                  Und Cross-Site Scripting: Letztlich läuft es auf eine saubere Validierung aller Eingabewerte hinaus (also Formularfelder und GET-Parameter), bevor diese wieder zur Anzeige gebracht werden.
                  Will aufjedenfall white-listing nutzen, aber mir fällt es schwer eine sichere aber auch benutzerfreundliche(d.h. soviele zeichen wie möglich) reg. Ausdrücke zu definieren. Mir ist auch aufgefallen das z.B. bei YoutTube sobald man eine Suchanfrage mit <> umgibt keine ergebnisse ausgibt.

                  Zu Deinem Formatierungsproblem. Vielleicht hilft Dir das html-Tag <pre>. Hier ein Link zur Doku:Pre-Tag auf Selfhtml.
                  Gruß ngomo
                  Das gut, da muss ich den String Text net mehr manipulieren. Jetzt nur noch das mit dem Validieren hinbekommen, dann hab ich es endlich

                  Comment


                  • #10
                    http://www.fileformat.info/tool/regex.htm

                    könnte helfen. Ansonten mal beschreiben....
                    Christian

                    Comment


                    • #11
                      Ich habe zurzeit min. 3 Input-Stellen die gefährlich sein.
                      1. Eingabe einer Youtube Url:
                      Ich definiere den Anfang und Ende der Url, dazwischen kommt eine ID die nur
                      Zahlen und 11 Stellig sein kann. Sollte also eigentl sicher sein.

                      2. Eingabe eines Kommentar Strings.
                      3. Eingabe einer Suche in Form eines String.

                      Zu 2./3. ich dachte mir das ich nur das Zeichen "<" bzw. ">" mit deren ASCII zu validieren, da anscheinend alle Script Attacken darauf zugreifen, aber mir kommt die Lösung "zu Einfach" vor.

                      Würde gerne fast alle zeichen Erlauben, wie z.B. !"§$%&/()=? usw. ob man dafür eine sichere white list Ausdruck findet? hmmm.

                      ----------------------------------------------------------------------------------------------------

                      Hab nebenbei auch eine "Validierungs API" gefunden : ESAPI

                      http://owasp-esapi-java.googlecode.c...e-summary.html

                      Aber konnte das nicht richtig in das Projekt einfügen, da es ein wenig kompliziert ist, das Ding zu conf. . Daher funktionieren nur ein Teil der vorhadnen Klassen.

                      Gibt es sonst keine Jar Bibliotheken die verschiedene Algohritmen beinhalten?
                      Kann mir das eigentl gar net vorstellen
                      ----------------------------------------------------------------------------------------------------
                      Alle anderen Inputs, wie z.B. Parameter sind int bzw. long werte, die einfach zu validieren sind.

                      Comment

                      Working...
                      X