dedlfix: Sicherheitsaspekte

Beitrag lesen

echo $begrüßung;

Habe auch gehört das man kein HTML bei Benutzereingaben zulassen sollte. Stimmt das?

Wenn du alles was gefährlich ist auf eine schwarze Liste setzt, wie stellst du sicher, dass du nichts vergessen hast? Wichtiger als das Kontrollieren auf bestimmte Eingangswerte ist das Verhindern von Code in der Ausgabe. Wenn du irgendwann zu neuen sicherheitsrelevnten Erkenntnissen kommst, wirfst du ja nicht alle vorhandenen Daten weg und lässt sie neu eingeben, damit sie auch ja durch den aktuellen Filter laufen. Deswegen solltest du dein Augenmerk mehr auf die Ausgabe legen. Wenn du nicht möchtest, dass der Empfänger Daten als Code interpretiert, dann musst du die Regeln der Dateneinbettung im Code befolgen. Als Lehrsatz formuliert: Daten sind immer kontextgerecht zu behandeln.

Um nur mal einige der wichtigsten Kontexte zu nennen:

Um Strings im Kontext MySQL-Statement einzufügen, gelten die Regeln für Strings, die von mysql_real_escape_string() berücksichtigt werden.
Um Daten im Kontext URL einzufügen, gelten die Regeln, die von url_encode() berücksichtigt werden.
Um Daten im Kontext HTML einzufügen, gelten die Regeln für HTML-eigene Zeichen, die von htmlspecialchars() berücksichtigt werden.
Um Daten in Javascript-Strings auszugeben, gibt es ebenfalls entsprechende Regeln, aber keine spezielle PHP-Funktion.

Mitunter kommt es vor, dass Kontexte ineinandergeschachtelt werden. Z.B. werden Daten in einer URL versendet, die in HTML eingebettet werden soll. Dann betrachtet man zunächst den inneren Kontext und  erhält eine Zeichenfolge. anschließend beachtet man nicht weiter, dass es einen inneren Kontext gab und behandelt die Zeichenfolge Zeichen für Zeichen gemäß äußerem Kontext.

Wie siehts mit Sessions aus. Gibts da Sicherheitslücken die man schließen sollte?

Das einzige, was der Client von einer Session mitbekommt, ist die Session-ID. Über deren Übertragung von und zum Client lässt sich das PHP-Handbuch im Session-Kapitel aus.

echo "$verabschiedung $name";