catatan:
Banyak orang tampaknya mengacaukan URL "pribadi" dengan otentikasi. Selain itu, tampaknya ada beberapa kebingungan bahwa mengirim tautan melalui entitas tepercaya adalah upaya otentikasi dua faktor. Untuk lebih jelasnya, kita berbicara tentang sumber daya yang dapat diakses publik, meskipun yang cukup sulit ditebak.
Saat menggunakan URL pribadi, Anda harus selalu berasumsi bahwa URL itu dapat dikompromikan - Anda harus merancang URL sedemikian rupa sehingga meskipun dikompromikan, sumber daya tidak akan membocorkan informasi kepada penyerang.
URL pribadi / sulit ditebak tidak setara dengan otentikasi berbasis kata sandi. Secara alami, URL pribadi tidak pribadi sama sekali - URL adalah sumber daya yang dapat diakses publik. Saya pikir istilah "pribadi" URL adalah nama yang salah, bukan URL "tidak jelas".
Ada kasus-kasus tertentu di mana penggunaan URL "pribadi" dapat diterima, tetapi secara inheren kurang aman daripada metode otentikasi tradisional seperti otentikasi kata sandi atau otentikasi berbasis kunci.
Beberapa tempat yang sering saya lihat URL "pribadi" yang digunakan adalah:
- Reset kata sandi email
- Email Pembuatan Sertifikat
- Akun / email konfirmasi email
- Pengiriman konten yang dibeli (ebooks, dll)
- Hal-hal misc lainnya seperti check-in penerbangan, print boarding pass, menggunakan URL pribadi selain otentikasi tradisional
Kesamaan di sini adalah bahwa URL acak biasanya hanya baik untuk operasi satu-shot. Juga, otentikasi tradisional dan URL acak tidak saling eksklusif - memang, mereka dapat digunakan bersama satu sama lain untuk memberikan keamanan tambahan saat mengirimkan sumber daya.
Seperti yang ditunjukkan oleh Robert Harvey, satu-satunya cara untuk menggunakan URL acak / pribadi secara aman adalah dengan menghasilkan halaman secara dinamis dan mengirimkan URL kepada pengguna sedemikian rupa sehingga pengguna dapat dianggap semi-autentikasi. Ini bisa berupa email, SMS, dll.
URL yang dibuat secara acak / pribadi biasanya memiliki beberapa properti:
- Itu harus berakhir setelah jumlah waktu yang wajar
- Ini harus berupa URL sekali pakai: IE harus kedaluwarsa setelah pertama kali diakses.
- Ini harus menunda otentikasi pengguna ke entitas lain yang dipercaya untuk mengotentikasi pengguna dengan aman. (Dengan mengirimkan tautan melalui email atau SMS, dll)
- Seharusnya tidak mungkin bagi komputer modern untuk memaksa paksa URL dalam jangka waktu sebelum berakhirnya - baik dengan membatasi API yang mengekspos sumber daya atau dengan membuat titik akhir url dengan entropi yang cukup sehingga tidak dapat ditebak.
- Seharusnya tidak membocorkan informasi tentang pengguna. IE: Jika halaman ini untuk mengatur ulang kata sandi: halaman tidak akan menampilkan informasi akun pemohon. Jika Alice meminta tautan setel ulang kata sandi dan Bob entah bagaimana menebak URL, Bob seharusnya tidak mengetahui kata sandi siapa yang disetel ulang.
- Jika tidak membocorkan informasi tentang pengguna, itu harus digunakan di atas otentikasi tradisional, misalnya halaman dapat mempertimbangkan pengguna yang diautentikasi jika mereka memiliki cookie set atau jika session_id mereka masih valid.
Sumber daya yang berbeda membutuhkan tingkat keamanan yang berbeda pula. Misalnya, jika Anda ingin berbagi resep rahasia dengan beberapa teman, Anda dapat menggunakan URL acak / pribadi untuk membaginya dengan mereka. Namun, jika sumber daya tersebut dapat digunakan untuk mencuri identitas seseorang atau membahayakan akun mereka dengan penyedia layanan lain, Anda mungkin akan lebih peduli tentang membatasi akses ke sumber daya itu.