Autenticazione SQL per l'autenticazione dell'utente [chiusa]

1

Questo meccanismo di autenticazione è vulnerabile all'iniezione SQL? In tal caso, come si potrebbe sfruttarlo e qual è il modo più efficace per mitigarlo?

if (isset($_POST['userid']) && isset($_POST['password'])){

$username = $_POST['userid'];
$password = crypt($_POST['password'],'34l5kj');


    $query = "SELECT * FROM users WHERE name =:username and pass=:password";
$db->query($query);
$db->bind(':username', $username);
$db->bind(':password', $password);
$db->execute();
$data = $db->single();

            $_SESSION['valid_user'] = $username;
            $_SESSION['user_id'] = $data['id'];
            $_SESSION['pwd']=$_POST['password'];
    
posta Judy Azar 22.10.2017 - 18:18
fonte

1 risposta

3

Stai usando parametri associati, che è un ottimo inizio. Questo piccolo frammento di codice dovrebbe stare bene contro l'input SQLi normale, ma ci sono alcuni altri potenziali problemi:

  • Non stai convalidando / disinfettando l'input. Anche se stai usando bind, dovresti comunque farlo
  • Stai assegnando la password a una variabile di sessione. Perché? Hai effettivamente il PW in testo normale che circonda la tua app Web
  • Non stai disinfettando l'output del DB prima di memorizzarlo nelle variabili SESSION. Non sapendo quale sia l'aspetto del tuo altro codice, è impossibile vedere come sarebbe sfruttato. Basta non rischiare.
risposta data 22.10.2017 - 19:16
fonte

Leggi altre domande sui tag