小编Dan*_*son的帖子

为什么""="利用这个MySQL查询?

在MySQL 5.6数据库上,我构建了这个简单的表并插入一行:

CREATE TABLE `users` ( 
`username` varchar(64) DEFAULT NULL, 
`password` varchar(64) DEFAULT NULL 
);

INSERT INTO users VALUES ('bob', 'pass');
Run Code Online (Sandbox Code Playgroud)

然后我在PHP中设置一个查询,如下所示:

$query = "SELECT * from users where username=\"".$username."\" and password=\"".$password."\"";
Run Code Online (Sandbox Code Playgroud)

$username$password它们都相等时""=",得到的查询是SELECT * from users where username="""="" and password="""="".当用于查询之前设置的表时,将返回表中的行.

问题是,MySQL如何评估该查询,使其认为查询有效并且WHERE语句为真?假设所有双引号都与最近的相邻双引号匹配,我原本期望查询被解释为类似这样,看起来应该被认为是乱码:

SELECT * from users where username=""
"="
" and password="
""
=
""
Run Code Online (Sandbox Code Playgroud)

以下是MySQL 5.6 DB上此行为的示例:http://sqlfiddle.com/#!9/02e606/2

php mysql security

7
推荐指数
1
解决办法
289
查看次数

标签 统计

mysql ×1

php ×1

security ×1