Come recuperare / registrare le password tentate da un accesso non riuscito [chiuso]

3

Ho visto la seguente domanda prima: È legale registrare le password dagli accessi non riusciti?

Penso che sollevi un'altra domanda: In che modo registro le password tentate non riuscite?

Sembra molto utile quando ho bisogno di verificare se qualcuno si sta ingegnando socialmente per entrare nell'account di qualcun altro.

    
posta vianna77 14.11.2015 - 17:49
fonte

1 risposta

2

Sarebbe incredibilmente semplice. È anche possibile registrare il valore della password tentata. Modifica la tua funzione di accesso in qualche modo, a seconda della lingua.

Ricorda, questo è uno pseudo codice non verificato, ma il concetto funzionerà :

  1. Coppia di elementi di sicurezza:

    private boolean properLength(String u, String p)
    {
         return ((u.length > 3 && u.length <= 12) && (p.length > 8 && p.length <= 30)) ? true : false;
    }
    
    private boolean properFormat(String u, String p)
    {
        return (regex.Valid(u, usernameRegex) && regex.Valid(p, passwordRegex)) ? true : false; 
    }
    
    private String stripBadStuff(String stuff)
    {
        // Just in case or something...
        return EncodingFunction.ToASCII(stuff).regexReplace(badCharacaterRegex, ""); 
    }
    
  2. E il login:

    public String login(String user, String pass) 
    { 
       if (!loginTriesExceeded) // Currently unhandled for example.
       {
           if ((user != null && pass != null) && properLength(user, pass) && properFormat(user, pass))
           {
                if (!userLoginTriesExceeded)
                {
                    // Strips potential hacker injection attempts. You may want to find another way to log this attempt. You wouldn't want to log this to a database without parameters/bound variables. That's beyond the scope of this answer. Google it.
                    String newUser = stripBadStuff(user);
                    String newPass = stripBadStuff(pass);
    
                   // Would be changing DB.lookup() to return true if valid login is detected. DB.lookup(newUser,newPass) will now be assumed that it tests the plaintext password against the salted hash. 
                    if (DB.lookup(newUser, newPass)) 
                    { 
                        // Prevent injection. This will assume DB.lookup() tests the password against the stored hash.
                        return "Hello " + newUser; 
                    }
                    else 
                    {
                        logInvalidAttempt(newUser, newPass);
                        return "Invalid login.";
                    }
               }
               else
               {
                    return "User login attempts exceeded.";
               }
            }
            else
            {
                return "Invalid login.";
            }
        }
        else
        {
            // Do nothing, or inform the visitor that they've exceeded max global logins based on their IP / cookie 
            return null;
        }
    } 
    

Dovresti semplicemente usare logInvalidAttempt(user, pass); quando fallisce. Quindi, invece di dire "login fallito", dovresti dire "login fallito" e registrare il tentativo, ma fai attenzione a non implementare alcun difetto di sicurezza con questo. Dovrai assicurarti che i dati siano inseriti correttamente.

In generale, solo la disinfezione dell'input non è la risposta, ma a volte la aggiungo come livello aggiuntivo dopo che tutto il resto è finito, per ogni evenienza. Non sempre, solo qualche volta. L'esempio qui è per scopi di apprendimento.

Ricorda che dovrai scrivere la tua funzione logInvalidAttempt() ; è troppo ampio per questa risposta.

Puoi farlo anche per qualsiasi Content Management System come joomla , WordPress , Drupal , Django , et al. Dopo tutto, sono open source. Quindi tutto ciò che devi fare è modificare la funzione di accesso appropriata.

Devi anche assicurarti che non vengano registrati troppi dati. Dovrai tagliarlo a un certo punto.

TLDR :

  1. Modifica la funzione login ().
  2. Quando l'utente tenta di accedere utilizzando credenziali non valide, registrarlo da qualche parte.
    • Se accedi a un database SQL Server , parametrizza le tue query.
    • Se accedi a un database Oracle , collega le tue variabili e usa le istruzioni preparate.
    • Se accedi a un database MySQL , usa le istruzioni preparate e associa i tuoi parametri.
    • Se lo si registra in un file , o in qualsiasi database , non consentire l'inserimento di troppi dati. Devi tagliarlo a un certo punto.
  3. Leggi i registri / database.
risposta data 14.11.2015 - 20:00
fonte

Leggi altre domande sui tag