Tengo algo de código como este que está abierto a la inyección de SQL. Tenemos hackeado y ahora lo fijado. Sólo quiero saber lo que las entradas (nombre de usuario y contraseña) debe ser con el fin de cortar este código. Quiero decir, incluso si la entrada

username = something' OR 'x'='x

A continuación, puede recuperar la contraseña de la primera de usuario en la tabla independientemente del nombre de usuario. Sin embargo, dentro de la if comprobamos si esta contraseña es correcta. Estoy suponiendo que la contraseña era muy fácil (tan fácil como 123456), y el hacker hizo un ataque de fuerza bruta de un diccionario. Sin embargo, me pregunto si hay otra manera de hackear este código mediante el uso de algunos de inyección otras de fuerza bruta la contraseña.

<?php
$username=$_POST['username'];
$password=$_POST['password'];

$result=runQuery("SELECT password FROM tbl_users WHERE username='".$username."''");
$row=mysql_fetch_array($result);

if($row['password']==$password){
    -- do sth... create a cookie etc..
}
else{
    --go to another page...
}
?>
Yo no creo que usted lea acerca de la inyección de sql.
Esta pregunta parece ser off-topic porque es un código de solicitud de revisión. Este se adapta mejor a codereview.stackexchange.com
Para proteger contra inyección sql, es necesario utilizar PDOo mysqli. Ni siquiera puede escapar de su entrada en su ejemplo. Como dijo Mike, en realidad no creo que lea nada acerca de la inyección de sql en el primer lugar.
Nombre de usuario: Bobby'; DROP TABLE tbl_users; --
¿Cuál fue el efecto de la piratería?

OriginalEl autor albatross | 2013-09-16

3 Comentarios

  1. 2

    Uso variable de unión en el PDO de la biblioteca.

    OriginalEl autor kwolfe

  2. 2

    Si hacker pase de valor:

    $username = "' OR * OR '"

    luego de la consulta será:

    SELECT password FROM tbl_users WHERE username='' OR * OR ''; – este será seleccionar cualquier usuario.

    Pero hacker puede:

    $username = "'; DELETE * FROM tbl_users WHERE username = * OR '";

    SELECT password FROM tbl_users WHERE username = ''; DELETE * FROM tbl_users WHERE username = * OR '';

    O puede hacerse UPDATE para cambiar cualquier contraseña.

    De seguridad? mysql_real_escape_string o preg_match("/^[a-zA-Z0-9]{3,15}$/", $username), por ejemplo.

    Gracias por la respuesta. Pero no, él tiene que saber los nombres de la tabla con el fin de manipular? tbl_users no es conocido… $username = «‘; DELETE * FROM tbl_users where username = * O ‘»;
    Por supuesto, pero si error_reporting está encendido, esto puede fuga. También, el hacker puede probar al azar combinaciones de consulta

    OriginalEl autor aso

  3. -1

    Utilizando booleano ciego o el tiempo de inyección ciega hacker puede recuperar toda la estructura de base de datos.

    Ejemplo:

    username = 'admin' and if(1=1, sleep(10), 5222) #

    Esta consulta va a tomar 10 segundos para volver y confirmar que su condición es true o false. El uso de la information_schema y SQL prueba de condición puede recuperar todas las bases de datos de información.

    OriginalEl autor Bobby Brown

Dejar respuesta

Please enter your comment!
Please enter your name here