Philipp Hasenfratz: noch ein prinzipielles Problem: Authentifizierung

Beitrag lesen

Halihallo Andreas

Noch ein prinzipielles Problem bei diesem Ablauf:

Wie verhindere ich am besten, das derjenige Anbieter, der die Mail erhält, dass der tatsächlich nur seine eigenen Daten eingeben kann?

Indem du ihm die anderen vorenthältst!?

Denn wenn ich wie geplant den Namen als Parameter übergebe, könnte er ja anfangen zu raten und mit Aussicht auf Erfolg, da er seine Konkurrenz wahrscheinlich gut kennt!

Hm. OK...

Was hätte ich da für Möglichkeiten:

Variante 2: Man übegebe nicht den Namen _und_ eine uniqueID als Parameter, die ID müßte man dann temporär speichern.

Temporär??? - Was, wenn er die Daten nach einer Woche nochmals ändern will? - Wie würdest du die Schranke festlegen?

Variante 3: MD5(Name) => Anbieter sind wohl nicht so gescheit, zu merkten, wie dieses Teil entsteht...

Variante 4: MD5(Name+time()) => diesen Wert einfach irgendwo speichern (musst nicht jedesmal die "Prüfsumme" neu berechnen).

Variante 5: crypt (Unix-crypt => nicht reversible Verschlüsselung => einfach den Wert, den dieses Teil zurückgibt speichern)

ich glaube, das mit einer uniqueID wäre sogar etwas zu arbeitsintensiv... Es geht auch noch schneller ;)

was haltet Ihr von Variante 2, ist das hinreichend sicher?

Im Prinzip glaube ich ja. Solange der Anbieter keinen menschenlesbaren String als URL enthält, ist meistens schon Ende :-)
Aber wenn wir schon bei Sicherheit sind: eine ID lässt mich eine aufsteigende Reihe von 1 beginnend vermuten. Das wäre wohl auch genau das, was ein schlauer Anbieter im Hinterköpfchen hätte. Sicherer würd ich es finden, wenn du einfach MD5 über den Namen plus Timestamp laufen lässt (oder nur timestamp) und diesen Wert dann einfach speicherst und dem Anbieter zuordnest.

Oder sollte ich lieber einen md5() kodierten string aus name.uniqueID übergeben? Das wäre wohl das einfachste, oder? Denn ein md5() String als Parameter-Wert stellt die wenigsten Email-Clients vor ein Problem!

use Digest::MD5 qw(md5_hex);

print md5_hex($name . time());

=> hex Werte sind bestimmt alle URL konform (dann brauchst du URI::Escape nicht). Eventuell würde auch MIME::Base64 oder gleich mit md5_base64 helfen; wobei der hex Wert "elegant" ist ;-)

Viele Grüsse

Philipp