Troy Hunt, güvenli bir şifre sıfırlama özelliği oluşturma hakkında bilmek istediğiniz her şey makalesinde bazı mükemmel noktalar sunuyor . En alakalı alıntılar:
[T] iki ortak yaklaşım:
- Sunucuda yeni bir şifre oluşturun ve e-postayla gönderin
- Sıfırlama işlemini kolaylaştıracak benzersiz bir URL'ye e-posta gönderin
Aksine çok sayıda rehberliğe rağmen, ilk nokta gerçekten olmak istediğimiz yer değil. Bunu yapmanın problemi, kalıcı bir parola anlamına gelir - geri dönüp istediğiniz zaman kullanabilirsiniz - artık güvenli olmayan bir kanal üzerinden gönderilmiştir ve gelen kutunuzda bulunur.
...
Ancak ilk yaklaşımda, bir hesabın kötü amaçlı kilitlenmesini kolaylaştıracak bir büyük sorun daha var. Bir web sitesinde bir hesabı olan birinin e-posta adresini biliyorsanız, o zaman sadece şifresini sıfırlayarak lütfen ne zaman istersen onları dışarı kilitleyebilirsiniz; gümüş bir tepside servis reddi saldırısı! Bu nedenle sıfırlama, yalnızca istekte bulunanın bunu yapma hakkını başarıyla doğruladıktan sonra yapılması gereken bir şeydir.
Bir sıfırlama URL'si hakkında konuşurken, sıfırlama işleminin bu özel örneğine özgü bir web sitesi adresinden bahsediyoruz.
...
Yapmak istediğimiz şey, sıfırlama URL'sinin bir parçası olarak bir e-postada gönderilebilen ve daha sonra kullanıcının hesabıyla birlikte sunucudaki bir kayıtla eşleştirilebilen benzersiz bir token oluşturmaktır, böylece e-posta hesabı sahibinin gerçekten parola. Örneğin, belirteç “3ce7854015cd38c862cb9e14a1ae552b” olabilir ve sıfırlamayı gerçekleştiren kullanıcının kimliğinin ve belirtecin oluşturulduğu zamanın (bir anda daha fazla) yanında bir tabloda saklanır. E-posta gönderildiğinde, “Sıfırla /? İd = 3ce7854015cd38c862cb9e14a1ae552b” gibi bir URL içerir ve kullanıcı bunu yüklediğinde, sayfa belirtecin varlığını kontrol eder ve sonuç olarak kullanıcının kimliğini doğrular ve parolanın değiştirilebilir.
...
Sıfırlama URL'si ile yapmak istediğimiz diğer bir şey de, sıfırlama işleminin belirli bir süre içinde, örneğin bir saat içinde tamamlanması için jetonu zaman sınırlamasıdır.
...
Son olarak, bunun bir defalık bir süreç olmasını sağlamak istiyoruz. Sıfırlama işlemi tamamlandıktan sonra, sıfırlama URL'sinin artık çalışmaması için belirteç silinmelidir. Önceki noktada olduğu gibi, bu da bir saldırganın sıfırlama URL'sini kötüye kullanabileceği çok sınırlı bir pencereye sahip olmasını sağlamaktır. Elbette sıfırlama işlemi başarıyla tamamlandıysa jetona artık gerek yoktur.
Bilgi sızıntılarından, CAPTCHA'lardan, iki faktörlü kimlik doğrulamasından ve elbette şifre karmaşası gibi temel en iyi uygulamalardan kaçınmak konusunda çok daha iyi noktalara değiniyor. Bruce Schneier'in uygulama konusundaki şüpheciliğini tercih ederek, Troy ile güvenlik sorularının yararlılığına katılmadığımı belirtmek önemlidir :
Tüm bu soruların noktası aynı: bir yedek şifre. Şifrenizi unutursanız, gizli soru kimliğinizi doğrulayabilir, böylece başka bir şifre seçebilir veya sitenin mevcut şifrenizi size e-postayla göndermesini sağlayabilirsiniz. Müşteri hizmetleri açısından harika bir fikir - bir kullanıcının ilk evcil hayvanının adını rastgele bir paroladan daha az unutması olasıdır - ancak güvenlik için korkunçtur. Gizli sorunun cevabını tahmin etmek iyi bir şifre olmaktan çok daha kolaydır ve bilgiler çok daha halka açıktır.