Hinweis:
Viele Leute scheinen eine "private" URL mit der Authentifizierung zu verwechseln. Es scheint auch einige Verwirrung zu geben, dass das Senden des Links über eine vertrauenswürdige Entität ein Versuch einer Zwei-Faktor-Authentifizierung ist. Klar ist, dass es sich um eine öffentlich zugängliche Ressource handelt, die jedoch schwer zu erraten ist.
Wenn Sie eine private URL verwenden, sollten Sie immer davon ausgehen, dass sie kompromittiert werden kann. Sie sollten eine solche URL so entwerfen, dass die Ressource auch dann keine Informationen an den Angreifer weitergibt, wenn sie kompromittiert wird.
Private / schwer zu erratende URLs entsprechen nicht der kennwortbasierten Authentifizierung. Private URLs sind von Natur aus überhaupt nicht privat - sie sind öffentlich zugängliche Ressourcen. Ich denke, der Begriff "private" URL ist eine falsche Bezeichnung, eher "obskure" URLs.
Es gibt bestimmte Fälle, in denen die Verwendung einer "privaten" URL akzeptabel ist, die jedoch von Natur aus weniger sicher ist als herkömmliche Authentifizierungsmethoden wie die Kennwortauthentifizierung oder die schlüsselbasierte Authentifizierung.
Einige der Orte, an denen ich häufig "private" URLs gesehen habe, sind:
- E-Mails zum Zurücksetzen des Passworts
- E-Mails zur Zertifikatserstellung
- Konto- / E-Mail-Bestätigungs-E-Mails
- Lieferung von gekauften Inhalten (E-Books usw.)
- Andere andere Dinge wie das Einchecken im Flugzeug, das Drucken der Bordkarte und die Verwendung privater URLs zusätzlich zur herkömmlichen Authentifizierung
Die Gemeinsamkeit besteht darin, dass zufällige URLs in der Regel nur für One-Shot-Vorgänge geeignet sind. Traditionelle Authentifizierung und zufällige URLs schließen sich nicht gegenseitig aus . Sie können sogar zusammen verwendet werden, um zusätzliche Sicherheit bei der Bereitstellung einer Ressource zu bieten.
Wie Robert Harvey ausgeführt hat, besteht die einzige Möglichkeit, eine zufällige / private URL sicher zu verwenden, darin, die Seite dynamisch zu generieren und die URL so an den Benutzer zu übermitteln, dass der Benutzer als semi-authentifiziert betrachtet werden kann. Dies können E-Mails, SMS usw. sein.
Eine zufällig generierte / private URL hat normalerweise einige Eigenschaften:
- Es sollte nach einer angemessenen Zeit ablaufen
- Es sollte eine Einweg-URL sein: IE sollte nach dem ersten Zugriff ablaufen.
- Die Authentifizierung des Benutzers sollte auf eine andere Entität verschoben werden, der es zur sicheren Authentifizierung des Benutzers vertraut. (Durch Versenden des Links per E-Mail oder SMS usw.)
- Es sollte für einen modernen Computer unmöglich sein, die URL in dem Zeitraum vor dem Ablauf zu erzwingen - entweder durch Beschränken der Geschwindigkeit, mit der die Ressource verfügbar gemacht wird, oder durch Erstellen eines URL-Endpunkts mit einer ausreichenden Entropie, die nicht erraten werden kann.
- Es sollte keine Informationen über den Benutzer preisgeben. IE: Wenn die Seite ein Passwort zurücksetzen soll: Die Seite sollte nicht die Kontoinformationen des Anforderers anzeigen. Wenn Alice einen Link zum Zurücksetzen des Passworts anfordert und Bob die URL errät, sollte Bob keine Möglichkeit haben, zu wissen, wessen Passwort er zurücksetzt.
- Wenn Informationen über den Benutzer verloren gehen, sollten diese zusätzlich zur herkömmlichen Authentifizierung verwendet werden. Beispielsweise kann eine Seite die Authentifizierung eines Benutzers in Betracht ziehen, wenn ein Cookie gesetzt ist oder wenn dessen Sitzungs-ID noch gültig ist.
Unterschiedliche Ressourcen erfordern unterschiedliche Sicherheitsstufen. Wenn Sie beispielsweise ein geheimes Rezept mit einigen Freunden teilen möchten, ist es akzeptabel, eine zufällige / private URL zu verwenden, um es mit ihnen zu teilen. Wenn die Ressource jedoch verwendet werden könnte, um die Identität einer Person zu stehlen oder deren Konten bei anderen Dienstanbietern zu gefährden, wäre es Ihnen wahrscheinlich wichtiger, den Zugriff auf diese Ressource zu beschränken.