Kirmse: Input-Prüfung / Sicherheit

Hallo,

Ich frage mich gerade wie ich mich vor Angriffen und Sicherheitslücken schützen kann.
Ich habe da ne Seite die es erlauben soll HTML zu posten mit einem WYSIWYG-Editor. Das Problem ist die einfache Manipulierbarkeit. und ein htmlspecialchars() am ende bringt ja nichts wenn ich den HTML-Code korrekt darstellen möchte. Eine Variante wäre natürlich BBCODE, aber das hat auch seine Nachteile...
Es gibt doch bestimmt eine Reihe von Zeichen die man einfach nur ersetzen braucht und schon ist der mögliche Schad-CODE entwaffnet. Eines davon wären die " ", aber die möchte ich nicht hässlich maskiert lassen " " sieht doof aus!

Worauf muss man achten?
Mach ich mir evtl zu viele Gedanken?
Warum gibt es keine Klasse oder ein Geheim-Rezept o.ä. dafür?
Soll ich doch auf BBCode setzen?
Ist BBCode überhaupt nicht manipulierbar?

Kirmse

  1. echo $begrüßung;

    Ich habe da ne Seite die es erlauben soll HTML zu posten mit einem WYSIWYG-Editor. Das Problem ist die einfache Manipulierbarkeit. und ein htmlspecialchars() am ende bringt ja nichts wenn ich den HTML-Code korrekt darstellen möchte. Eine Variante wäre natürlich BBCODE, aber das hat auch seine Nachteile...
    Es gibt doch bestimmt eine Reihe von Zeichen die man einfach nur ersetzen braucht und schon ist der mögliche Schad-CODE entwaffnet. Eines davon wären die " ", aber die möchte ich nicht hässlich maskiert lassen " " sieht doof aus!

    Die anderen sind <, > und &. Aber genau das wolltest du ja nicht. Es bleibt dann nicht viel übrig, als einen Parser zu schreiben, der nur einige, von dir als unschädlich eingestufte Elemente und Attribute zulässt und alles andere ablehnt. Und selbst damit sind schon in prominenten Fällen Sicherheitslücken übersehen worden. Oder du nimmst andere Syntax, wie BBCode oder Wiki-Markup[1].

    Soll ich doch auf BBCode setzen?

    Der Vorteil ist, dass die Syntax überschaubarer, einfacher zu erlernen und einfacher zu parsen ist.

    Ist BBCode überhaupt nicht manipulierbar?

    Das kommt auf die/deine Umsetzung an.

    [1] Wiki-Markup steht hier stellvertretend für die viele verschiedene in Wikisystemen verwendete Syntax.

    echo "$verabschiedung $name";

    1. Moin,
      Die anderen sind <, > und &. Aber genau das wolltest du ja nicht. Es bleibt dann nicht viel übrig, als einen Parser zu schreiben,

      Ja und warum gibts das nicht schon als Klasse wie für den BBCode?

      Kirmse

      1. echo $begrüßung;

        Die anderen sind <, > und &. Aber genau das wolltest du ja nicht. Es bleibt dann nicht viel übrig, als einen Parser zu schreiben,
        Ja und warum gibts das nicht schon als Klasse wie für den BBCode?

        Ich weiß, dass es HTML-Parser in PEAR gibt.

        echo "$verabschiedung $name";

        1. http://pear.php.net/package/HTML_Safe

          Danke!

          Kirmse