Wieso sind Tokens auf Webseiten wichtig?

Tokens, die heimlichen Begleiter im Internet. Mal sieht man sie, mal nicht. Mal gibt es sie, manchmal auch nicht. Wieso sollte man dennoch immer Tokens auf Webseiten für verschiedenste Funktionen verwenden? Sind diese nicht unnötig und belasten nur den Server und den Benutzer? Sind Tokens mittlerweile überflüssig?

Der Grund ist sehr schnell ausgesprochen. Sicherheit!
Hierbei fragen sich viele wieso? Ganz einfach. Eine vollkommen normale Funktion kann ganz leicht missbraucht werden und den Benutzer auch den letzten Nerv kostet. Sodass dieser die Webseite für immer verlässt.
Das will natürlich kein Webseitenbetreiber 😉

Werbung

Wie habe ich das mit dem Missbrauch gemeint?

Ganz einfach. Bindet ein Benutzer die Logout Adresse der Seite als Bild in seiner Signatur ein, wird der Benutzer ohne weiteres beim Aufruf eines Beitrags ausgeloggt. Man stelle sich vor, du surft von Beitrag zu Beitrag und wirst dabei jedesmal aus irgendeinem unerfindlichen Grund ausgeloggt und musst dich zum weiterlesen wieder neu anmelden. Das strapaziert nun mal ziemlich stark die Nerven.

Wie kann man sowas verhindern?

Tokens. Nur wenn ein Token mitversendet wird, wird der Benutzer auch ausgeloggt. Somit ist es dann egal, ob ein Benutzer die Logout Adresse als Bild einbindet. Es passiert dann einfach nichts.

Es gibt verschiedene Wege, Tokens zu erstellen. Hier ein paar Methoden die ich bereits öfters im Internet erblickt habe:

  • Als Token wird das verschlüsselte Passwort des Benutzers verwendet. (Nicht zu empfehlen!)
  • Wenn sich der Benutzer registriert, wird ein statischer Token erstellt, der sich nie ändert. (Besser als nichts.)
  • Jeden Monat bekommt der Benutzer einen neuen Token zugewiesen. (Minimale Sicherheit)
  • Bei jeder Funktionsbetätigung (Logout, etc.) wird ein neuer Token generiert. (Gute Sicherheit, kann zu Problemen führen.)
  • Jede Funktion besitzt einen eigenen Token, der nach einer bestimmen Zeit oder nach Betätigung der Funktion geändert wird. (Meine Empfehlung, maximale Sicherheit!)

Auch ein zweistelliger Token sorgt bereits für einen großen Sicherheitszuwachs!

Auch wenn man keine Benutzer besitzt, können Tokens auch bei z.B. Kontaktformularen eine Sicherung, gegen erneutes absenden sein. (Kein/Wenig Sicherheitszuwachs gegen Spam!)

Wie sieht so ein Token aus?

Tokens kann man in verschiedensten Formen generieren lassen. Das wichtigste dabei ist, dass dieser von User zu User unterschiedlich ist. Hier ein paar Beispiele, wie diese Tokens aussehen können.

  • md5 – 4543d94bce927720e26e32d9eb507d12
  • sha1 – b2a0c4de4b5410e3e41175560987771bd94136ef
  • crc32b – a10663fc
  • adler32 – 3a6306de

Wie wird ein Token generiert?

Hierfür bieten sich unterschiedliche Wege. Beliebt ist hierbei die Methode via microtime und mt_rand.
Hier ein Beispiel, wie ein solcher Token generiert wird:

<?php
$MD5token = hash('md5', microtime(true));
$CRC32btoken =  hash('crc32b', microtime(true));
var_dump($MD5token, $CRC32btoken);

Die Ausgabe wäre hierbei:

string(32) "7c4ff1401b38bb1ebcb98471e255584f"
string(8) "dda6010b"

Wie man sieht, bekommt man einen ziemlich unterschiedlichen Wert. Zu beachten ist hierbei, was für welche Funktion verwendet wird, und wie stark das Besucheraufkommen ist. Bei sehr vielen Benutzern kann der md5 Token um vieles mehr Speicherplatz beanspruchen als der CRC32b Token. Es wären dann immerhin 24 Zeichen Unterschied pro Token.

Wie überprüfe ich einen Token, ob dieser richtig ist?

Zu aller erst. Speichert diesen bitte um himmels Willen nicht in Klartextform als Cookie ab. So einen Hash kann jedes Script mit Leichtigkeiten auslesen. Die beste lösung wäre es, den Token in einer Datenbank abzuspeichern und dem User eine Session zuzuweisen.

Wie übergebe ich dem Benutzer den Token?

Hierzu verwende in Formen einen unsichtbaren Input Eintrag. Hier ein Beispiel, was ich mir darunter vorstelle:

<form method="post">
<input type="hidden" name="t" value="4543d94bce927720e26e32d9eb507d12" />
[...]
</form>

Sieht der Benutzer nicht in den Quelltext, bemerkt dieser den Token auch nicht. Bei Funktionen wie Logout, kann man diesen Token auch via $_GET, anstatt mit $_POST weitergeben. Der Link würde dann z.B. so aussehen: http://example.unterhaltungsbox.com/logout.php?token=dda6010b Man kann sich natürlich auch mit den ReWrite Regeln von Apache oder einer anderen Serversoftware spielen. Die Adresse würde dann z.B. dieser Form entsprechen: http://example.unterhaltungsbox.com/logout/dda6010b
Ich persönlich empfehle bei so sichtbaren Tokens, wie der Logout Link, einen kurzen Token. Ein langer Token sieht nicht besonders schön aus und könnte den Benutzer verschrecken.

Zur Erinnerung.
Ein Token ist nur ein Schutz gegen Funktionsmissbrauch und gegen unbeabsichtigten Spam. Ein Token bietet keinerlei Schutz gegen beabsichtigten Spam. Hierbei hilft großteils nur ein Captcha.

Bild „Key“ von Oliver Scholtz (Human o2) – Iconfinder.com

Author: Thomas2500

Wieso sind Tokens auf Webseiten wichtig?
Rate this post

One thought on “Wieso sind Tokens auf Webseiten wichtig?

  1. Harald

    Schön wäre es, wenn du diesen Beitrag eine gewisse Note verleihst, indem du ein Beispielscript vorstellst. (Am besten ein Kontaktformular o.ä)

Kommentar verfassen