2010-11-29 9 views
13

Est-ce que quelqu'un sait ce que quelque chose comme OR 1# signifie dans le contexte de l'injection mysql?Que signifie # en sql?

+2

Le symbole '#' a quelques noms anglais (nombre, octothorpe, hex, hash, sharp) que vous pouvez * Google :) – BoltClock

+0

:) merci de m'avoir aidé à trouver des pages complètement différentes! En toute sincérité, j'ai fait Google pour mysql pound symbole, etc, avant de demander et juste obtenu des pages sur les livres britanniques – munchybunch

+4

Ironiquement, c'est maintenant le meilleur résultat si vous cherchez 'mysql hash symbol' et le second résultat pour' mysql octothorpe' . – munchybunch

Répondre

31

C'est la version de MySQL du délimiteur de commentaire de ligne. En SQL standard, le délimiteur de commentaire de ligne est --.

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

dans le contexte de l'injection SQL, si l'attaquant sait que vous utilisez MySQL, il peut l'utiliser pour mettre fin brusquement l'instruction SQL malveillant, ce qui provoque MySQL d'ignorer tout ce qui est derrière le # et exécuter seulement les choses cela vient avant. Toutefois, cela n'est efficace que contre les instructions SQL sur une seule ligne. Voici un exemple:

Entrée:

Nom d'utilisateur: fake' OR 1#
Mot de passe: pass

Résultante SQL:

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

Ce qui est exécuté comme cela, qui retourne tous rangée:

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

Ceci est le début d'un commentaire. Cela signifie que tout ce qui se passera après sera ignoré par l'analyseur.

+1

Pour clarifier la réponse, tout sur la même ligne ... – Darbio

+1

@JD: a-ha, pour protéger contre les injections sql nous avons besoin de plus de lignes dans nos requêtes (ironie) ;-) – zerkms