He escaneado mi script de inicio de sesión utilizando SQL Inject Me Firefox addon

De acuerdo a los Resultados de la Prueba, mi script era vulnerable a la Inyección de SQL. Resultado por ejemplo

Results:
Server Status Code: 302 Found
Tested value: &#49&#39&#32&#79&#82&#32&#39&#49&#39&#61&#39&#49
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1 UNI/**/ON SELECT ALL FROM WHERE
Server Status Code: 302 Found
Tested value: %31%27%20%4F%52%20%27%31%27%3D%27%31

Mi script

  1. login.php – formulario de inicio de Sesión
  2. check-login.php – verificación de inicio de sesión de detalle y aquí está el código.

    $email = limpiar($_POST[‘username’]);
    $pass = limpiar($_POST[‘password’]);
    $usuario = «select * from tbl_admin donde admin=’$email’ y pass=’$pass'»;

    //algún código

    $_SESSION[‘login_mes’] = «Usted ha iniciado la sesión con éxito !»;
    header(«Location:admin.php»);
    exit();

    } else {

    $_SESSION[‘login_mes’] = «no Válido de la dirección de correo electrónico o contraseña, por favor, inténtelo de nuevo.»;
    header(«Location:login.php»);
    exit();
    }

Los problemas vinieron cuando el error de inicio de sesión. Si puedo quitar el

} else {

$_SESSION['login_mes'] = "Invalid email address or password, please try again.";
header("Location:login.php");
exit();
}

Los fracasos No detectar por SQL Inject Me y cómo arreglar esta parte?

¿Qué hace el clean función de hacer?
desinfectar la entrada del usuario
Tipo de un lado de la pregunta: ¿existe un concepto de consultas parametrizadas en PHP? Podría ser vale la pena considerar.

OriginalEl autor wow | 2009-08-16

4 Comentarios

  1. 9

    302 es el servidor de la manera de decir «quiero que vaya a [algún lugar]» (en este caso login.php).
    No es un error, pero perfectamente normales respuesta. Especialmente en tu caso tiene mucho más sentido (si me preguntan a mí) para enviar al usuario a una página de inicio de sesión después de una inyección SQL intento de dejarlo.

    yeah.. sentido
    +1 para el derecho a Diagnosticar

    OriginalEl autor Fredrik

  2. 2

    Cuatro años más tarde, pero acabo de mirar en esta pregunta y pensé que iba a compartir para la siguiente persona.

    Después de algunos análisis, llegamos a la conclusión de que el 302 es en sí mismo no es una preocupación. La preocupación es lo que la página precedido de los 302 que se ha enviado, pero fue arrastrado por la 302 antes de que pudiera mostrarse. Si la página anterior recibido por el navegador (y tal vez registrado por el Violinista) contenía errores de base de datos (o cualquier otra información de que un hacker podría encontrar útil) de lo que es malo. Si el 302 es la respuesta inicial y tiene un cuerpo vacío, sólo un encabezado, entonces creo que están bien.

    Usted tiene que mostrar la página de error (el propósito de la 302), así que no veo cómo eso podría ser considerado «demasiada información».

    Sí. En mi sitio, en el 302 fue redirigir a una página de error que se muestra el mensaje de error. Se estaba filtrando información en el sentido de que la instrucción tsql fue revelado, pero no se parecía a exponer mi sitio de la inyección.

    OriginalEl autor Mike Jr

  3. 1

    «//algún código» no ayuda mucho, pero el problema puede estar con esta clean(). Trate de mysql_real_escape_string() lugar.

    Edit: Como se dijo anteriormente, 302 código significa «que se están reenviando». Es doens no significa que la Inyección SQL se sucessfull, como eso no quiere decir que no estaba bien. En este caso, sólo sé que si se puede determinar donde esta el 302 es avanzar, a «admin.php» o «login.php».

    la función de limpieza trabajando muy bien. el problema vino después de } else {
    también sabemos que no fue un éxito y que la redirección fue login.php (porque es cuando se quita el particular header(«Location:…») el 302 ya no se detecta. Tener un 302 como un indicador del éxito de la inyección de SQL es un lugar braindead idea en mi humilde opinión, me pregunto qué estaban pensando.

    OriginalEl autor Havenard

  4. 0

    Algunas pruebas de penetración de las herramientas prefieren los servidores no devolver mensajes de error o al menos muy genérico mensajes. Por ejemplo, en SQL Inject Me dice

    La herramienta funciona mediante el envío de la base de datos de cadenas de escape a través del formulario
    campos. Luego se busca la base de datos de mensajes de error que se generan en
    el renderizado de HTML de la página.

    Así que tal vez cuando se ve la respuesta 302 del código, se supone que su aplicación está volviendo demasiado la información. Usted puede probar esta teoría mediante el establecimiento de un estado distinto del código de tu respuesta y a ver si SQL Inject Me da un error, así:

    header('HTTP/1.1 404 Not Found');

    Por supuesto, el envío de un mensaje de error 404 no ayudará a su usuario a encontrar su camino de regreso a la página de inicio de sesión, por lo que puede que tenga que experimentar con otros 3XX mensajes, tal vez 303 o 307.

    OriginalEl autor james.garriss

Dejar respuesta

Please enter your comment!
Please enter your name here