Michael Schröpl: -> Apache::Session::MySQL -> Variablen sicher übergeben

Beitrag lesen

Hi,

gut, jetzt geht aber der bösartige, eingeloggte
User her, und bastelt mal aus id=123  ein bisschen
herum im URL und macht id=999 daraus.

Das darf er eben nicht können.

In $ID muß wesentlich mehr drin stehen als nur die tatsächliche Session-ID - beispielsweise Informationen aus dem ursprünglichen Login-Vorgang (die Benutzerkennung) und ein zufälliges Element.
Und das alles zusammen versehen mit einer Prüfsumme, welche dafür sorgt, daß ein zufälliges Bitmuster nur mit exorbitant geringer Wahrscheinlichkeit überhaupt zu einer syntaktisch korrekten Angabe führen kann.

Zerlegen muß Du das Zeug natürlich selbst, und prüfen ebenfalls. Aber nach der Zerlegung liefert Dir die Prüfsumme schon mal einen sehr zuverlässigen Ansatzpunkt, ob das überhaupt alles sein kann. Nur im Falle einer gültigen Prüfsumme mußt Du die Inhalte auch noch semantisch validieren, um damit zu prüfen, daß dieser Anwender die Session-ID auch zu Recht verwendet.

Auf diese Weise ist die Verarbeitung eines Angreifers, der versucht, IDs auszuwürfeln, zudem wesentlich performanter möglich, als wenn Du jedesmal einen Datenbankzugriff etc. brauchst, um die fehlerhaften Angaben zu erkennen.

Viele Grüße
      Michael