Что значит # в sql? - PullRequest
       7

Что значит # в sql?

15 голосов
/ 29 ноября 2010

Кто-нибудь знает, что означает что-то вроде OR 1# в контексте внедрения MySQL?

Ответы [ 2 ]

37 голосов
/ 29 ноября 2010

Это версия разделителя комментария строки в MySQL.В стандартном SQL разделитель комментария строки имеет вид --.

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

Так что в контексте внедрения SQL, если злоумышленник знает, что вы используете MySQL, он может использовать его для внезапного завершения вредоносного оператора SQL., заставляя MySQL игнорировать все, что стоит за #, и выполнять только то, что стоит перед ним.Однако это эффективно только для однострочных операторов SQL.Вот пример:

Вход:

Имя пользователя: fake' OR 1#
Пароль: pass

Результирующий SQL:

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

, который выполняется так, который возвращает каждую строку :

SELECT * FROM users WHERE username = 'fake' OR 1
1 голос
/ 29 ноября 2010

Это начало комментария. Это означает, что все, что после этого будет пропущено парсером.

...