2010-11-29 31 views
13

有沒有人知道OR 1#是什麼意思,在mysql注入的上下文中意味着什麼?在sql中有什麼意思?

+2

`#`符號有幾個英文名稱(數字,十四制,十六進制,哈希,尖銳),你*可以*谷歌:) – BoltClock 2010-11-29 03:44:11

+0

:)謝謝你幫我找到完全不相關的網頁!在所有的嚴肅性中,我做了Google for mysql英鎊符號等等,然後才問,並且剛剛得到英鎊英鎊 – munchybunch 2010-11-29 04:25:17

回答

31

它是行註釋分隔符的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

這是評論的開始。這意味着之後的任何內容都會被解析器跳過。