2011-08-15 17 views
5

He visto una pieza de código de ejemplo de inyección sql como a continuación, ¿qué significa '/ *' en sql?¿Qué significa/* en sql?

$_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*'; 

$_POST['password'] = 'guess'; 

$mysql['username'] = addslashes($_POST['username']); 

$mysql['password'] = addslashes($_POST['password']); 

$sql = "SELECT * FROM users WHERE username = '{$mysql['username']}' AND password = '{$mysql['password']}'"; 

$result = $db->query($sql); 
+0

http://dev.mysql.com/doc/refman/5.1/en/comments.html –

Respuesta

8

/* es el comienzo de un comentario. */ finaliza el comentario. El atacante está tratando de comentar el resto de la consulta.

+0

pero necesita un */ para finalizarlo, ¿o sí? solo /* hizo que el sql fuera incorrecto. – xdazz

+0

@xdazz: la forma en que lo ha publicado en su pregunta, el ataque parece que daría lugar a una consulta sin token de comentario de cierre. Sin embargo, imagine que un atacante incluyó '* /' en el campo de contraseña. Puedes ver cómo eso podría terminar el comentario y dar como resultado una consulta correctamente formada con el código del atacante inyectado. – Asaph

+2

Los comentarios pueden permanecer abiertos, por lo tanto, se extienden al final. – hakre

0

/* comienza un comentario, por lo que todo lo que después de que se ignora hasta que un */ se encuentra

Su atacante introdujo un comentario abierto, anulando así el efecto de la comprobación de la contraseña

0

/* significa el comienzo de una multilínea comentario

Por ejemplo:

/* 

CREATE PROC A_SAMPLE_PROC 

BEGIN 

AS 
SELECT * FROM A_SAMPLE_TABLE 
END 

*/ 

mientras -- significa comentario de una sola línea. El atajo de teclado para comentar en MS SQL Server Studio es Ctrl + K, Ctrl + C