Uwaga:
Wiele osób myli „prywatny” adres URL z uwierzytelnianiem. Wydaje się również, że istnieje pewne zamieszanie, że wysłanie łącza za pośrednictwem zaufanego podmiotu jest próbą uwierzytelnienia dwuskładnikowego. Mówiąc wprost, mówimy o zasobie publicznie dostępnym, choć wystarczająco trudnym do odgadnięcia.
Korzystając z prywatnego adresu URL, należy zawsze zakładać, że może on zostać skompromitowany - należy zaprojektować taki adres URL, aby nawet w przypadku jego naruszenia zasób nie ujawniał informacji atakującemu.
Prywatne / trudne do odgadnięcia adresy URL nie są równoważne z uwierzytelnianiem opartym na haśle. Z natury prywatne adresy URL wcale nie są prywatne - są zasobami publicznie dostępnymi. Myślę, że termin „prywatny” adres URL jest niewłaściwy, a raczej „niejasny” adres URL.
W niektórych przypadkach dopuszczalne jest użycie „prywatnego” adresu URL, ale są one z natury mniej bezpieczne niż tradycyjne metody uwierzytelniania, takie jak uwierzytelnianie za pomocą hasła lub uwierzytelnianie oparte na kluczu.
Niektóre miejsca, w których często widuję „prywatne” adresy URL to:
- E-maile dotyczące resetowania hasła
- Wiadomości e-mail dotyczące generowania certyfikatów
- E-maile z potwierdzeniem konta / e-maila
- Dostawa zakupionych treści (ebooki itp.)
- Inne różne rzeczy, takie jak odprawa, wydrukowanie karty pokładowej, użycie tradycyjnych adresów URL oprócz tradycyjnego uwierzytelniania
Wspólną cechą jest to, że losowe adresy URL są zwykle dobre tylko w przypadku operacji jednorazowych. Ponadto tradycyjne uwierzytelnianie i losowe adresy URL nie wykluczają się wzajemnie - w rzeczywistości można ich używać w połączeniu ze sobą, aby zapewnić dodatkowe bezpieczeństwo podczas dostarczania zasobu.
Jak zauważył Robert Harvey, jedynym sposobem bezpiecznego korzystania z losowego / prywatnego adresu URL jest dynamiczne wygenerowanie strony i przesłanie adresu URL użytkownikowi w taki sposób, aby można było uznać go za częściowo uwierzytelniony. Może to być e-mail, SMS itp.
Losowo generowany / prywatny adres URL zazwyczaj ma kilka właściwości:
- Powinno wygasnąć po rozsądnym czasie
- Powinien to być adres URL jednorazowego użytku: IE powinien wygasnąć po pierwszym otwarciu.
- Powinien odroczyć uwierzytelnianie użytkownika w innym zaufanym podmiocie w celu bezpiecznego uwierzytelnienia użytkownika. (Wysyłając link e-mailem, SMS-em itp.)
- Nowoczesny komputer nie powinien mieć siły wymusić adresu URL w przedziale czasowym poprzedzającym wygaśnięcie - albo przez ograniczenie szybkości interfejsu API, który ujawnia zasób, albo przez utworzenie punktu końcowego adresu URL z wystarczającą entropią, tak że nie można go zgadnąć.
- Nie powinno to ujawniać informacji o użytkowniku. IE: Jeśli strona ma zresetować hasło: strona nie powinna wyświetlać informacji o koncie osoby żądającej. Jeśli Alice zażąda linku do resetowania hasła, a Bob w jakiś sposób zgadnie adres URL, Bob nie powinien mieć możliwości dowiedzenia się, czyje hasło resetuje.
- Jeśli ujawnia informacje o użytkowniku, należy go użyć oprócz tradycyjnego uwierzytelnienia, na przykład strona może uznać użytkownika za uwierzytelnionego, jeśli ma ustawiony plik cookie lub jego identyfikator sesji jest nadal ważny.
Różne zasoby wymagają różnych poziomów bezpieczeństwa. Jeśli chcesz na przykład udostępnić tajny przepis niektórym przyjaciołom, dopuszczalne byłoby użycie losowego / prywatnego adresu URL w celu podzielenia się nim z nimi. Jeśli jednak zasób ten mógłby zostać wykorzystany do kradzieży czyjejś tożsamości lub naruszenia bezpieczeństwa kont z innymi usługodawcami, prawdopodobnie bardziej zależy ci na ograniczeniu dostępu do tego zasobu.