Inyección de SQL de autenticación de usuario [cerrado]

1

¿Este mecanismo de autenticación es vulnerable a la inyección de SQL? Si es así, ¿cómo podría uno explotarlo y cuál es la forma más efectiva de mitigar esto?

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'];
    
pregunta Judy Azar 22.10.2017 - 18:18
fuente

1 respuesta

3

Estás usando parámetros enlazados, lo que es un gran comienzo. Este pequeño fragmento de código debería estar bien con la entrada regular de SQLi, pero hay algunos otros problemas potenciales:

  • No está validando / saneando la entrada. A pesar de que está utilizando vinculación, aún debería hacer esto
  • Está asignando la contraseña a una variable de sesión. ¿Por qué? De hecho, tiene el PW de texto simple flotando alrededor de su aplicación web
  • No estás limpiando la salida de DB antes de almacenarla en las variables SESSION. Al no saber cuál es su otro código, es imposible ver cómo se explotaría esto. Simplemente no te arriesgues.
respondido por el Trickycm 22.10.2017 - 19:16
fuente

Lea otras preguntas en las etiquetas