我也遇到相当怪异的行为与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