我也遇到相當怪異的行爲與SQL LIKE,=和LIKE BINARYSQL = VS LIKE VS LIKE BINARY,不區分大小寫
注:密碼的前3個字符其實是3Vf
和查詢的其餘部分語法上也是正確的。
SUBSTRING(password,1, 3) = "3VF" -> returns true
SUBSTRING(password,1, 3) = "3Vf" -> returns true
SUBSTRING(password,1, 3) LIKE "3VF" -> returns true
SUBSTRING(password,1, 3) LIKE "3Vf" -> returns true
但是如果我使用LIKE BINARY,我得到區分大小寫行爲
SUBSTRING(password,1, 3) LIKE BINARY "3VF" -> returns false
SUBSTRING(password,1, 3) LIKE BINARY "3Vf" -> returns true
我不明白爲什麼comparisions不區分大小寫。考慮到密碼是VARCHAR(64)
。在我看到的所有資源中,它都表示=和LIKE都區分大小寫。
注:我運行了完整的查詢是
SELECT * from users where username="natas16" AND SUBSTRING(password,1, 3) = XX
而且,這是不是一個真實的世界應用程序,但一個NATAS水平。這是一個'黑客'遊樂場。他們與你應該利用的漏洞有不同的級別。所以這不是一個真實世界的例子。
http://www.overthewire.org/wargames/natas/
只是讓我們很清楚的敏感,你不應該來的密碼存儲在數據庫中。使用'PASSWORD('Function')'來正確存儲它。雖然你描述的行爲很奇怪。 https://dev.mysql.com/doc/refman/5.0/en/password-hashing.html – Colton 2013-03-19 16:09:08
你是否將passwordword保存爲純文本?使用散列鍵和列分類作爲latin_colate_cs。 – georgecj11 2013-03-19 16:09:50
natas是一種道德黑客操場。你得到一個挑戰,你應該以某種方式打破。這樣做的目的是爲了強制它。 – 2013-03-19 16:10:04