¿Cuál es el significado de "algo AND 1 = 0" en SQL?

7

He leído en alguna parte que, en los ataques de inyección SQL, los atacantes usan esas palabras clave en los puntos de entrada de la aplicación. ¿Cuál es el propósito de hacer esto?

    
pregunta Anandu M Das 25.09.2014 - 11:58
fuente

2 respuestas

20

El fragmento AND 1=0 siempre se evalúa como false y, por lo tanto, la consulta siempre devuelve un conjunto vacío, por ejemplo. si el fragmento de SQL en la aplicación es

SELECT * FROM users WHERE username = '<placeholder>'

entonces puedo convertir esta consulta a

SELECT * FROM users WHERE username = 'admin' AND 1=0 --'

cuando se utiliza admin' AND 1=0 -- como valor para el marcador de posición.

Ahora puedo insertar una segunda instrucción que se ejecuta en lugar de la deseada, por ejemplo,

SELECT * FROM users WHERE username = 'admin' AND 1=0; TRUNCATE TABLE users; --'

Aquí vaciaré la tabla users como ataque.

Otra cosa utilizada es OR 1=1 que siempre se evaluó como true . Esto se usa para consultar una tabla completa y eliminar el lugar donde se produce completamente, por ejemplo,

SELECT * FROM users WHERE username = 'admin' OR 1=1 --'

Esto se logra usando admin' OR 1=1 -- como el marcador de posición en el ejemplo anterior.

En este caso, se devolverá la tabla completa users .

    
respondido por el Uwe Plonus 25.09.2014 - 12:08
fuente
6

1=0 siempre es falso, por lo que una cláusula que contenga AND 1=0 también será falsa. Esto, al igual que el siempre verdadero OR 1=1 , se puede usar para omitir las condiciones en una cláusula WHERE .

La variante OR 1=1 es generalmente más útil (por ejemplo, SELECT username WHERE userid=173 para obtener su nombre de usuario se convierte en SELECT username WHERE userid=173 OR 1=1 para obtener cada nombre de usuario en el sistema), pero la variante AND 1=0 puede, por ejemplo, usarse para omitir un "es este usuario ya registrado" cheque.

    
respondido por el Mark 25.09.2014 - 12:07
fuente

Lea otras preguntas en las etiquetas