Hallo Eddie,
a) ich will im endgueltig veroeffentlichten Bericht nichts haben, was dem von mir vorgeschriebenen Seitendesign widerspricht.
Erlaubt sind folgende Tags: b, i, a, li, hr, alle einzugeben als BB-Code [b] (obwohl ich Leuten ohne JavaScript) auch die Eingabe als normale Tags <b> erlauben will (vor allem, da ich in der aktuellen Datenbank tausend normale Tags habe und die nicht alle konvertieren will).
Nur <a> sollte mit Attributen (aber eigentlich nur einem einzigen Attribut) erlaubt sein.
Du könntest Dir die Funktion strip_tags mal anschauen. Allerdings würde ich zu einer Reinen BB-Code Kösung raten, denn sonst müssen die Leute aufpassen, was sie für Sonderzeichen eingeben. (Du könntest natürlich den HTML-Code selbst "scannen" anstelle strip_tags zu verwenden, das birgt aber ein Sicherheitsrisiko, falls Du einen Fehler dabei machst [1]) Daher ist htmlspecialchars (maskiert alle HTML-Sonderzeichen) und danach eine Routine zur Verabeitung von BB-Code am sinnvollsten. (IMHO)
b) ich will nicht, dass beim Aufruf der Seite beim User irgendwelches Zeug zur Ausfuehrung kommt ==> JavaScript, Flash.
Wenn Du von Anfang an keinen direkten HTML-Code erlaubst, dürfte das kein Problem sein. Allerdings dürfen auch Deine Verarbeitungsroutinen für BB-Code, die Du nach htmlspecialchars auf den Code anwendest, keinen HTML-Code produzieren, der so etwas bewirkt.
c) ich will nicht, dass jemand in meinen Formularen Datenbankbefehle ausfuehren kann, aber ich denke, das geht eh' nicht.
Wenn Du Datenbanksonderzeichen escapesed, dann _warscheinlich_ nicht. Allerdings kannst Du Dir nie vollkommen sicher sein. Du solltest immer _sehr_ vorsichtig sein, bevor Du eine Variable an eine Datenbank reichst.
Vielleicht gibt's ja irgendwelche vorgefertigten PHP-Module (denn bei mir laeuft PHP), durch die ich meinen Formular-Inhalt einfach nur noch durchjagen muss, so dass auf der anderen Seite ungefaehrlicher und datenbank-geeigneter Code rauskommt?
Datenbankgeeignet: Schau Dir mysql_escape_string beziehungsweise das Pendant Deiner verwendeten Datenbank. Oder schau Dir gleich PEAR::DB an, das kennt eine Methode quote() sowie einige andere nette Dinge.
HTML-Sonderzeichen: Maskiere sie mit htmlspecialchars.
Aber wie Michael schon gesagt hat, Sicherheit ist immer ein Prozess und kein Zustand; Du musst Dir _jederzeit_ überlegen, wie jemand Deinen Code angreifen könnte. (auch wenn es noch so unwarscheinlich ist) Und Du musst _jederzeit_ damit Rechnen, dass ein Angreifer schneller als Du ist.
Viele Grüße,
Christian
[1] Und das wirst Du mit ziemlich großer Warscheinlichkeit, denn in solchen Routinen steckt _sehr_ viel Fehlerpotential und auch "Experten" haben da schon häufig Fehler reinprogrammiert. Ich glaube mit zu erinnern, dass strip_tags selbst mal einer Sicherheitslücke hatte, ist aber bestimmt schon sehr lange her.
PS: Ach ja, hier noch ein paar Links:
strip_tags: http://de3.php.net/de/strip_tags
htmlspecialchars: http://de3.php.net/de/htmlspecialchars
mysql_escape_string: http://de3.php.net/de/mysql_escape_string
PEAR::DB: http://pear.php.net/manual/de/core.db.php