Tach!
Eine whitelist würde sich doch also eher anbieten anstatt der Rat "Zeichen nicht zu escapen". Oder wo ist hier mein Denkfehler?
Es geht hier darum, Zeichen, die man selbst und zwar direkt in den Code schreibt, als Zeichen zu schreiben und nicht in irgendeiner Ersatzschreibweise. Es geht hier nicht darum, Benutzereingaben zu verarbeiten.
Dagegen diese Artikel hier und hier.
Um zumindest mal den ersten Artikel zu kommentieren (ungeachtet dessen, dass er nicht zum vorliegenden Thema passt):
UTF-7 (nicht 8) zu verwenden, ist eher ein akademisches Problem. Man muss das absichtlich als Programmierer tun und dann hat man noch ganz andere Probleme zu bewältigen, als Nutzereingaben sicher wieder auszugeben. Der Fall muss nicht weiter betrachtet werden.
Bei weggelassenen Anführungszeichen um Attributwerte muss man sich im Klaren sein, dass man nun nicht in einem String-Kontext ist. Ein Escaping ist nur bedingt sinnvoll. Das Hauptproblem ist, dass man im HTML-Modus bleibt und alles nach dem ersten Leerzeichen als Code interpretiert wird. Attributwerte ohne Anführungszeichen zu verwenden und dann noch Benutzereingaben (oder andere variable Werte) einzufügen ist grob fahrlässig seitens des Programmieres. htmlentities()/htmlspecialchars() verspricht auch nicht, alle Sicherheitsprobleme zu lösen. Noch dazu dann nicht, wenn der Programmierer die Problematik nicht verstanden hat, sondern einfach nur stur irgendwas anwendet, weil das angeblich Sicherheit bringt.
Ebenfalls fahrlässig ist es, Nutzereingaben direkt als href-Inhalt zu verwenden. Nutzer mit Backlinks zum Kommentieren anzuregen, regt vor allem Spammer an, dies zu tun. Wer als Webseitenbetreiber diese Back-Links dann nicht zumindest kontrolliert, sollte sich selbst als Teil des Sicherheitsrisikos betrachten.
dedlfix.