Saya mencari metode terbaik untuk mengimplementasikan fitur "kata sandi yang hilang".
Saya keluar dengan 2 ide:
Ketika pengguna mengklik kata sandi yang terlupa, pengguna harus memasukkan nama pengguna, email dan mungkin tanggal lahir atau nama belakang. Kemudian email dengan kata sandi sementara akan dikirim ke akun email pengguna. Pengguna menggunakan kata sandi sementara untuk login dan mengatur ulang kata sandinya.
Mirip, tetapi email akan berisi tautan untuk membiarkan pengguna mengatur ulang kata sandinya.
Atau ada yang bisa menyarankan saya cara yang lebih baik dan aman? Saya juga berpikir untuk mengirim kata sandi atau tautan sementara, memaksa pengguna untuk mengatur ulang kata sandi dalam waktu 24 jam, atau kata sandi atau tautan sementara tidak akan dapat digunakan. Bagaimana cara melakukannya?
Jawaban:
Pembaruan: direvisi pada Mei 2013 untuk pendekatan yang lebih baik
password_change_requests
dengan kolomID
,Time
danUserID
. Ketika pengguna baru menekan tombol, catatan dibuat di tabel. TheTime
kolom berisi waktu ketika pengguna menekan tombol "Lupa Password". TheID
adalah string. Sebuah string acak panjang dibuat (katakanlah, sebuah GUID) dan kemudian di- hash seperti kata sandi (yang merupakan topik terpisah dalam dan dari dirinya sendiri). Hash ini kemudian digunakan sebagai 'ID' di tabel.http://www.mysite.com/forgotpassword.jsp?ID=01234567890ABCDEF
. Halaman forgetpassword.jsp harus dapat mengambil parameter ID. Maaf, saya tidak tahu Java, jadi saya tidak bisa lebih spesifik.ID
dari URL, hash lagi, dan memeriksa tabel. Jika catatan seperti itu ada di sana dan tidak lebih dari, katakanlah, 24 jam, pengguna akan diberikan prompt untuk memasukkan kata sandi baru .sumber
ID
,UserID
,Time
,TokenHash
.. Anda akan menghasilkan DUA panjang, string acak Masukan string pertama ( "id") dalamID
kolom; hash yang kedua (yang "token" ) dan letakkan hash diTokenHash
kolom. Menghasilkan link sepertiforogotPassword.jsp?id=asdasd&token=asdasd
. Token dalam link TIDAK hash. Apakah ini masuk akal sekarang?Semuanya tergantung pada situs Anda dan tingkat keamanan yang Anda coba capai tetapi proses dasar untuk aplikasi web berjalan seperti berikut:
Pengguna menavigasi ke halaman 'Lupa kata sandi saya' dan memasukkan nama pengguna atau email mereka (mana saja yang unik) untuk meminta pengaturan ulang kata sandi.
Opsional pada tahap ini Anda dapat mengonfirmasi permintaan dengan meminta informasi tambahan seperti jawaban atas pertanyaan keamanan yang telah ditentukan atau tanggal lahir mereka dll. Level tambahan ini menghentikan pengguna yang menerima email yang tidak mereka minta.
Cari akun pengguna. Simpan kata sandi sementara (biasanya GUID) dan cap waktu terhadap catatan akun. Kirim email ke pengguna yang berisi kata sandi sementara.
Pengguna mengklik tautan yang berisi kata sandi sementara dan pengidentifikasi pengguna dalam email atau menavigasi ke halaman 'lupa kata sandi saya' dan menyalin & menempelkan kata sandi sementara dan pengidentifikasi mereka. Pengguna memasukkan kata sandi baru mereka dan mengonfirmasinya.
Cari catatan pengguna dan jika waktu saat ini berada dalam batas waktu yang ditentukan (misalnya 1 jam) dari cap waktu yang disimpan di langkah 2, maka hash dan simpan kata sandi baru. (Jelas hanya jika kata sandi sementara cocok!). Hapus GUID dan cap waktu sementara.
Prinsipnya di sini adalah bahwa pengguna diemail kata sandi sementara yang memungkinkan mereka mengubah kata sandi mereka. Kata sandi yang disimpan awalnya (harus hash!) Tidak pernah diubah menjadi kata sandi sementara jika pengguna mengingatnya.
Kata sandi asli tidak akan pernah ditampilkan kepada pengguna karena harus hash dan tidak dikenal.
Perhatikan bahwa proses ini sepenuhnya bergantung pada keamanan akun email pengguna. Jadi itu tergantung pada tingkat keamanan yang ingin Anda capai. Ini biasanya cukup untuk sebagian besar situs / aplikasi.
sumber
Troy Hunt membuat beberapa poin bagus dalam artikelnya, Segala sesuatu yang Anda ingin tahu tentang membangun fitur reset kata sandi yang aman . Kutipan yang paling relevan adalah:
...
...
...
...
Dia membuat banyak poin bagus tentang menghindari kebocoran informasi, CAPTCHA, otentikasi dua faktor, dan tentu saja praktik terbaik dasar seperti hashing kata sandi. Saya pikir penting untuk dicatat bahwa saya tidak setuju dengan Troy tentang kegunaan pertanyaan keamanan, lebih memilih skeptisisme Bruce Schneier terhadap praktik tersebut :
sumber
Saya akan pergi dengan:
sumber
Ketika Anda mengirim informasi apa pun melalui email, itu tidak akan aman. Ada terlalu banyak cara seseorang bisa mendapatkannya. Ini akan menjadi permainan anak-anak bagi peretas yang terampil yang ingin mencuri informasi Anda.
Jangan mengirim informasi pribadi seperti kata sandi dan informasi pendapatan melalui email karena itu bisa menjadi SANGAT MEMBAYARKAN untuk Anda dan organisasi Anda jika informasi tersebut bocor atau dicuri. Pikirkan keamanan dengan serius. Hanya perlu satu insiden agar semua bata jatuh.
Adapun pengambilan kata sandi, baca dengan seksama Lupa Kata Sandi Praktik Terbaik .
SUNTING: Tautan yang diperbarui
sumber
Seperti yang dikatakan, itu tergantung pada tingkat keamanan yang diperlukan, namun, jika Anda membutuhkan tingkat yang lebih tinggi, beberapa solusi baru yang saya lihat meliputi;
Menampilkan setengah dari kata sandi sementara ketika identitas pengguna telah dikonfirmasi (pertanyaan keamanan, alamat email dll.) Kemudian setengah lainnya dikirim ke akun email. Jika akun surel telah disusupi, kecil kemungkinan orang yang sama juga berhasil melakukan serangan tengah. (Terlihat di UK Goverment Gateway)
Mengonfirmasi identitas melalui email dan media lain - misalnya kode yang dikirim melalui teks ke ponsel yang terdaftar. (Terlihat di eBay / PayPal)
Karena di suatu tempat di antara dua ekstrem ini menerapkan pertanyaan keamanan mungkin cara untuk pergi sebagaimana disebutkan oleh DaveG.
sumber
Jika Anda memasukkan alamat email dengan registrasi. Tombol "lupa kata sandi" mengirim email ke alamat email itu. Ini memastikan bahwa informasi dikirim ke email tepercaya.
(Kecuali jika basis data diretas, tetapi tidak ada yang aman).
sumber
Berikut adalah tiga tautan yang sangat bagus yang memberikan informasi tentang pengaturan ulang kata sandi:
http://jtauber.com/blog/2006/03/20/account_management_patterns/
(Jangan biarkan pengguna mengonfirmasi menggunakan GET): http://www.artima.com/forums/flat.jsp?forum=106&thread=152805&start=15&msRange=15
http://fishbowl.pastiche.org/archives/docs/PasswordRecovery.pdf
Semoga itu bisa membantu. Mereka benar-benar membantu saya memahami masalah ini.
sumber
Saya akan memberlakukan alamat email unik di seluruh akun.
Maka itu adalah masalah sederhana mengirimkan tautan ke halaman sementara yang memungkinkan orang tersebut mengubah kata sandi mereka. (tunggu 24 jam atau kurang)
Akun email pengguna adalah tautan terlemah dalam skenario ini.
sumber
Jangan pernah mengirim email kata sandi kepada pengguna. Bahkan jika itu dihasilkan secara otomatis. Pendekatan terbaik (merekomendasikan dan digunakan oleh SANS dan lainnya):
Jika dia tidak mengklik tautan dalam 24 jam atau lebih, nonaktifkan tautannya (sehingga tidak mengubah kata sandi lagi).
Jangan pernah mengubah kata sandi tanpa persetujuan pengguna. Itu berarti jangan mengirim email kata sandi baru hanya karena seseorang mengklik tautan kata sandi yang terlupa dan mengetahui nama akunnya.
sumber