2010-11-29 18 views
13

¿Alguien sabe qué significa algo como OR 1# en el contexto de la inyección de mysql?¿Qué significa # en sql?

+2

El símbolo '#' tiene algunos nombres en inglés (número, octothorpe, hexadecimal, hash, nítido) que usted * puede * Google :) – BoltClock

+0

:) ¡gracias por ayudarme a encontrar páginas completamente no relacionadas! con toda seriedad, hice Google para mysql libra símbolo, etc., antes de preguntar y acabo de obtener páginas en libras británicas – munchybunch

+4

Irónicamente, este es ahora el resultado superior si busca 'mysql hash symbol' y el segundo resultado para' mysql octothorpe' . – munchybunch

Respuesta

31

Es la versión de MySQL del delimitador de comentario de línea. En SQL estándar, el delimitador de comentario de línea es --.

-- This is a standard SQL comment. 
# This is a MySQL comment. 

Así, en el contexto de la inyección de SQL, si el atacante sabe que está utilizando MySQL se puede utilizar para interrumpir bruscamente la instrucción SQL malicioso, provocando MySQL para ignorar lo que está detrás de la # y ejecutar solamente la materia eso viene antes de eso. Sin embargo, esto solo es efectivo contra sentencias de SQL de una sola línea. He aquí un ejemplo:

de entrada:

Nombre de usuario: fake' OR 1#
Contraseña: pass

resultante SQL:

SELECT * FROM users WHERE username = 'fake' OR 1#' AND password = 'pass' 

el que se ejecuta como este, que devuelve cada fila:

SELECT * FROM users WHERE username = 'fake' OR 1 
1

Este es el comienzo de un comentario. Significa que cualquier cosa posterior será omitida por el analizador.

+1

Para aclarar la respuesta, todo EN LA MISMA LÍNEA ... – Darbio

+1

@JD: a-ha, para proteger contra las inyecciones sql necesitamos más líneas en nuestras consultas (ironía) ;-) – zerkms