Enkele suggesties:
Stel het wachtwoord van de gebruiker niet opnieuw in totdat het is bevestigd. Stel het wachtwoord van de gebruiker niet onmiddellijk opnieuw in. Stel het pas opnieuw in als de gebruiker op een bevestigingslink klikt die naar zijn vooraf geregistreerde e-mailadres is verzonden.
Een CAPTCHA vereist. Wanneer een gebruiker vraagt om zijn wachtwoord opnieuw in te stellen, forceer hem dan om een CAPTCHA op te lossen voordat u verder gaat. Dit is bedoeld om te voorkomen dat geautomatiseerde tools veel gebruikers verdriet proberen te bezorgen, en de gebruiker te dwingen te bewijzen dat ze een mens zijn (geen robot).
Willekeurig. De beperkte tijd URL voor het opnieuw instellen van een wachtwoord moet een willekeurig, niet te raden onderdeel bevatten. Zorg ervoor dat u willekeurigheid van cryptokwaliteit gebruikt. De uitvoer van / dev / urandom
of System.Security.Cryptography.RNGCryptoServiceProvider
zou een goede keuze zijn. De uitvoer van rand ()
of random ()
of System.Random
is niet willekeurig genoeg en zou een slechte keuze zijn. Een GUID of tijdstempel is niet willekeurig genoeg en zou geen goede keuze zijn.
Voeg een tijdslimiet toe. De bevestigingslink voor het opnieuw instellen moet na een redelijke tijd verlopen: bijvoorbeeld 24 uur . De link mag slechts één keer bruikbaar zijn en moet onmiddellijk vervallen zodra deze wordt gebruikt.
Voeg een verklarende tekst toe aan de e-mail. Misschien wilt u wat verklarende tekst toevoegen aan de e-mail, om uit te leggen waarom de e-mail is verzonden, voor het geval iemand een reset aanvraagt voor een account dat niet van jou is. U kunt tekst toevoegen zoals "Iemand heeft gevraagd om het wachtwoord opnieuw in te stellen voor uw account gebruikersnaam
op site
. Als u dit verzoek heeft gedaan, klikt u hier om uw wachtwoord te wijzigen. Als u heeft dit verzoek niet gedaan, klik hier om het verzoek te annuleren. "
Stuur een e-mail nadat het wachtwoord opnieuw is ingesteld. Zodra het wachtwoord is gereset, stuurt u een e-mail naar de gebruiker naar laat hen weten dat het wachtwoord is gewijzigd. Voeg het nieuwe wachtwoord niet toe aan die e-mail.
Annuleringen controleren. U kunt overwegen wat logica op te nemen om te controleren hoe vaak gebruikers op de annuleringslink klikken om aan te geven dat ze geen reset hebben aangevraagd. Als dit boven een bepaalde drempel uitkomt, kan het handig zijn om een waarschuwing te sturen naar de netbeheerders. Ook als een annuleringslink voor een bepaald verzoek wordt bezocht nadat de bevestigingslink is bezocht, is dat een mogelijke indicatie van een aanval op die gebruiker - misschien wilt u op dat moment actie ondernemen, bijvoorbeeld ongeldig maken het wachtwoord van de gebruiker en vereisen dat ze hun wachtwoord opnieuw instellen. (Dit is een verdediging tegen de volgende aanval: de aanvaller krijgt toegang tot de mailbox van de gebruiker, vraagt vervolgens om het wachtwoord op uw site te resetten en bezoekt vervolgens de bevestigingslink. Als de aanvaller deze e-mails niet uit de inbox van de gebruiker verwijdert, wanneer de echte gebruiker zijn e-mail leest, kan hij op de annuleringslink klikken, waardoor u een indicatie krijgt van mogelijke problemen.)
Gebruik HTTPS. De link moet https gebruiken (niet http :), ter bescherming tegen verschillende aanvallen (bijv. Firesheep-aanvallen op gebruikers die op internet surfen vanuit een internetcafé).
Log deze bewerkingen. Ik raad aan om al dergelijke verzoeken te loggen. Naast het loggen van de gebruikersnaam van de gebruiker, wil je misschien het IP-adres van de client die om een reset-link heeft gevraagd, per e-mail naar de gebruiker sturen, evenals het IP-adres van de client die de reset-link heeft bezocht.
Meer lezen. Misschien wil je ook de uitstekende blogpost van Troy Hunt lezen, Alles wat je ooit wilde weten over het bouwen van een veilige functie voor het opnieuw instellen van wachtwoorden. Met dank aan @coryT voor een link naar deze bron.
Ten slotte overweeg authenticatie zonder wachtwoord. Wachtwoorden hebben veel problemen als authenticatiemechanisme, en u zou andere methoden kunnen overwegen om gebruikers te authenticeren, zoals het opslaan van een veilige permanente cookie op hun computer met een niet te raden geheim om ze te authenticeren. Op deze manier is er geen wachtwoord om te vergeten en kan de gebruiker geen phishing krijgen, hoewel u een gebruiker wel een manier moet bieden om toegang te verlenen vanaf een nieuwe machine of een nieuwe browser (mogelijk via e-mail naar de pre- geregistreerd e-mailadres). Dit enquêtedocument bevat een uitstekend overzicht van veel alternatieve verificatiemethoden en hun sterke en zwakke punten.