Siechfred: Verhindern von HTML-Code in Gästebucheinträgen

Guten Abend,

wieder einmal bin ich beim basteln an meinem Gästebuch-Script. Jetzt würde ich gern noch eine "HTML-Sperre" einbauen. Bisher sucht das Script einfach den Text der Nachricht nach "<" ab (dachte ich mir so, da ja alle Tags damit anfangen). Gibt es aus eurer Sicht dann immer noch Möglichkeiten, HTML-Code einzubauen, die durch diese Lösung nicht erfasst werden?

mfg Torsten

--
Opinions are like assholes: everybody has one.
ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  1. Viel einfacher ;)

    $text=strip_tags($text);

    Gruß
    Nobody

    1. Prost!

      $text=strip_tags($text);

      Vielen Dank, aber ich hätte vielleicht erwähnen sollen, dass ich datt Dingen in Perl schreibe ;-)

      mfg Torsten

      --
      Opinions are like assholes: everybody has one.
      ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  2. Hallo Torsten,

    wieder einmal bin ich beim basteln an meinem Gästebuch-Script. Jetzt würde ich gern noch eine "HTML-Sperre" einbauen. Bisher sucht das Script einfach den Text der Nachricht nach "<" ab (dachte ich mir so, da ja alle Tags damit anfangen). Gibt es aus eurer Sicht dann immer noch Möglichkeiten, HTML-Code einzubauen, die durch diese Lösung nicht erfasst werden?

    Aus meiner sicht zwei: du definierst Ausnahmeregel oder du definierst bestimmte Möglichkeiten der Auszeichnung (wie z.B. das < > hier im Forum)
    Du kannst dir auch Fertige Scripte ansehen: z.B. das Forumsscript von Matt Wright, oder das frühre Script dieses Forums http://sourceforge.net/projects/selfforum

    Grüße
    Thomas

    1. Prost Thomas,

      Aus meiner sicht zwei: du definierst Ausnahmeregel oder du definierst bestimmte Möglichkeiten der Auszeichnung (wie z.B. das < > hier im Forum)

      Ich wollte erstmal Anfänger-Like nur HTML generell ausschließen, ohne die Möglichkeiten, wie sie z.B. dieses Forum bietet.

      Du kannst dir auch Fertige Scripte ansehen: z.B. das Forumsscript von Matt Wright, oder das frühre Script dieses Forums http://sourceforge.net/projects/selfforum

      Werde ich tun, vielen Dank.

      mfg Torsten

      --
      Opinions are like assholes: everybody has one.
      ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  3. Hi Siechfried,

    ... "HTML-Sperre" einbauen. Bisher sucht das Script einfach den Text der Nachricht nach "<" ab ... Gibt es aus eurer Sicht dann immer noch Möglichkeiten, HTML-Code einzubauen ... ?

    Eigentlich nur noch das &, das ernöglicht aber deutlich weniger Schabernack(ggfls. nach & Umsetzen).
    Ausserdem landen so alle möglichen Sonderzeichen (u.a. unser allseits geliebtes Währunssymbol: ?) ohne Umsetzung auf den korrekten Zeichensatz in der Seite. Kann man aber imho für den Anfang erstmal ignorieren.

    Gruss,
     Carsten

  4. guten morgen,

    Jetzt würde ich gern noch eine "HTML-Sperre" einbauen.

    Ich habe in einem anderen PERL-Script grade eine ziemlich radikale Lösung dafür gefunden:
    $body =~ s#</?\w+[^>]*># #g;
    $body =~ s/(&#?\w{1,20};)|(.[^&]*)/ defined $1 ? $1 /ges;

    Die Variable "$body" steht hier für die id oder den Namen des "body"-tags. So _ganz_ sehe ich auch noch nicht durch, ob das wirklich in dieser Form nötig ist, aber ich kann dir versichern, daß das prima funktioniert. Reguläre Ausdrücke sind einfach eine nahezu unerschöpfbare Fundgrube ...

    Grüße aus Berlin

    Christoph S.

  5. Moin!

    wieder einmal bin ich beim basteln an meinem Gästebuch-Script. Jetzt würde ich gern noch eine "HTML-Sperre" einbauen. Bisher sucht das Script einfach den Text der Nachricht nach "<" ab (dachte ich mir so, da ja alle Tags damit anfangen).

    Und was macht es dann?

    Normalerweise würde ich dir htmlspecialchars() empfehlen, aber da du Perl benutzt, dann eben nur dies:
    Setze die HTML-Sonderzeichen <, >, & und " (besser ist besser) in ihre Entities um, und du wirst keine Probleme haben.

    strip_tags() ist übrigens eine ganz miese Funktion, die einfach nur nach < und > sucht und alles dazwischen entfernt. Also auch dann, wenn man gar kein HTML meinte, wie z.B. in "Wenn ich eine Zahl < 6 und auch > 4 haben will, welche ist das?"

    Das wird zu "Wenn ich eine Zahl  4 haben will, welche ist das?".

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi,

      Normalerweise würde ich dir htmlspecialchars() empfehlen, aber da du Perl benutzt, dann eben nur dies:
      Setze die HTML-Sonderzeichen <, >, & und " (besser ist besser) in ihre Entities um, und du wirst keine Probleme haben.

      Ich würde bei Perl dazu das Modul HTML::Entities[1] benutzten. Das verwandelt alle Sonderzeichen in ihre Entities.

      Grüße Andres Freund

      [1]http://search.cpan.org/author/GAAS/HTML-Parser-3.28/lib/HTML/Entities.pm

      --
      ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
  6. Hi,

    wieder einmal bin ich beim basteln an meinem Gästebuch-Script. Jetzt würde ich gern noch eine "HTML-Sperre" einbauen. Bisher sucht das Script einfach den Text der Nachricht nach "<" ab (dachte ich mir so, da ja alle Tags damit anfangen). Gibt es aus eurer Sicht dann immer noch Möglichkeiten, HTML-Code einzubauen, die durch diese Lösung nicht erfasst werden?

    Kuckstu hier: http://www.perldoc.com/perl5.8.0/pod/perlfaq9.html#How-do-I-remove-HTML-from-a-string-

    HTH

    wunderwarzenschwein

    --
    ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
  7. Guten Morgen,

    Erst mal Danke an alle anderen Antwortposter. Allerdings ist das Problem, das ich jetzt noch habe, dass ich Suchen und Ersetzen mit RegEx eigentlich vermeiden wollte, um Einträge nicht zu verstümmeln (siehe auch Beispiel von Sven), das Script sollte einfach nur eine Meldung nach dem Schema "Sie verwenden HTML-Code in Ihrem Eintrag, das ist jedoch nicht erlaubt." ausgeben. Ich muss mir allerdings mal den RegEx von Christoph und in der Perl-Doku ansehen, ob ich den irgendwie für meine Zwecke nutzbar machen kann.

    Fazit für mich ist, dass es wohl nicht ausreichend sein dürfte, die Nachricht bloß auf das "<" hin abzusuchen.

    mfg Torsten

    1. Moin!

      Fazit für mich ist, dass es wohl nicht ausreichend sein dürfte, die Nachricht bloß auf das "<" hin abzusuchen.

      Das viel grundlegendere Fazit dürfte sein, dass du dich entscheiden mußt.

      Eine Textarea nimmt ASCII-Text entgegen. Naja, sicherlich auch Unicode - das wandelt der Browser dann vermutlich irgendwie beim Abschicken um.

      Aber welche _Bedeutung_ der Text haben soll, den der Benutzer eingibt, das mußt du entscheiden. Du kannst sagen, dass der eingegebene Text _unformatiert_ sein soll. Das ist der simpelste Fall. Dann werden alle Zeichen 1:1 wieder im Browser dargestellt, was bedeutet, dass du HTML-Sonderzeichen in Entities wandeln mußt, damit diese als Zeichen dargestellt werden.

      Oder du sagst, dass der Text HTML-Quellcode sein soll. Dann darfst du die HTML-Sonderzeichen natürlich _nicht_ codieren, sondern mußt sie so belassen. Wenn der Autor dann aber ein < oder ein & im Text als _Zeichen_ verwenden will, muß er das in die Textarea als Entity < oder & eingeben. > muß nicht zwingend als $gt; eingegeben werden, es ist aber schöner so.

      Eine Mischform beider Textarea-Bedeutungen geht nicht. Es ist schlicht nicht sauber zu trennen, ob der Benutzer jetzt <b> als Fettschrift meinte, oder ob er den HTML-Quellcode schreiben wollte. Das ist insbesondere bei HTML-Hilfeforen spannend. :)

      Die Krücke, die als BB-Code bekannt geworden ist: Man nimmt eine im täglichen Leben noch unwahrscheinlichere Zeichenkombination wie [b], um Fettschrift zu aktivieren. Das verhindert natürlich, dass man diese drei Zeichen als Text verwenden kann.

      Eine Textarea ist eben kein WYSIWYG-Editor.

      - Sven Rautenberg

      --
      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
  8. Guten Abend,

    an dieser Stelle wie immer vielen Dank für die Antworten. Ich habe das Problem wie von Andres vorgeschlagen mit dem Modul HTML::Entities gelöst. Klappt bestens. Über die Geschichte mit den BB-Codes werde ich mir nach meinem wohlverdienten Pfingsturlaub Gedanken machen.

    mfg Torsten

    --
    Es sind nur noch 30°C und ich sitze im Garten :-))
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}