Ich habe ein Szenario, in dem Benutzer einer Site, die ich erstelle, einige grundlegende Informationen in ein Webformular eingeben können, ohne sich anmelden zu müssen. Die Site wird mit ASP.NET/C# entwickelt und verwendet MSSQL 2005 für seine relationalen Daten.Implementieren sicherer, eindeutiger "single-use" -Aktivierungs-URLs in ASP.NET (C#)
Die Benutzer erhalten eine E-Mail von der Site, die ihnen einen eindeutigen Link zur Eingabe der spezifischen Informationen gibt, die sie benötigen. Die E-Mail wird dem Stil der E-Mails sehr ähnlich sein, die wir bei der Registrierung für Websites wie Foren erhalten. Sie enthalten einen nach dem Zufallsprinzip generierten URL-Parameter, der sich ausschließlich auf einen bestimmten Zweck bezieht (z. B. die Überprüfung einer E-Mail-Adresse für ein Forum).
Meine Abfragen betreffen die sichere Implementierung dieses Problems. Ich habe darüber nachgedacht, eine GUID als eindeutigen Identifikator zu verwenden, bin mir jedoch unsicher, welche Auswirkungen dies in der Sicherheitswelt haben wird.
- Ist eine GUID ausreichend lang genug, dass Werte nicht leicht erraten werden können (oder im Laufe der Zeit brutal erzwungen)?
Ist die GUID-Implementation von .NET ausreichend zufällig in dem Sinne, dass es eine gleiche Chance auf die Erzeugung aller möglichen Werte im "Schlüsselraum" gibt?
Wenn die Verwendung einer GUID ein akzeptabler Ansatz ist, sollte die Site dann auf die Informationen per URL-Umschreiben umleiten oder die Informationen in einer Datentabelle mit der GUID als Referenz verknüpfen?
Wird mit einem URL-Rewriting die wahre Quelle der Daten ausgeblendet?
Sollte ich TSQL SELECT NEWID() als GUID-Generator über die .NET-Implementierung in Betracht ziehen?
Bin ich völlig falsch mit meiner Herangehensweise an dieses Problem?
Vielen Dank,
Carl
Sorry, aber das ist wirklich falsch und irreführend - GUIDs sind nicht gut für diese Art von Sache, siehe meine Antwort unten. – AviD
GUID, im Sinne von * eindeutige Kennung * ist nicht wirklich geeignet (wie ich in # 2 erwähnt). Aber nichts hindert Sie daran, sie als 128-Bit-Nummer zu verwenden. –
Aber die Sache ist, sie sind * nicht * wirklich 128-Bit-Nummern (obwohl es 128 Bits dauert, um sie zu speichern). Wiederum ist zu viel davon entweder statisch oder leicht zu erraten. GUIDs haben keine Verwendung in sicheren Bezeichnern. Was das OP braucht, ist etwas Sicheres und lang genug im Sinne von "128 Bits of Randomness", was GUIDs nicht sind, nicht einmal annähernd. – AviD