我在使用 SQL LIKE、= 和 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
我不明白为什么比较不区分大小写。考虑到密码是VARCHAR(64)
. 在我在网上看到的所有资源中,它都说 = 和 LIKE 都区分大小写。
注意:我正在运行的完整查询是
SELECT * from users where username="natas16" AND SUBSTRING(password,1, 3) = XX
此外,这不是一个真实世界的应用程序,而是一个 natas 级别。这是一个“黑客”游乐场。它们具有不同级别的漏洞,您应该利用这些漏洞。所以这不是一个真实世界的例子。