sql查询作为字符串-不会被注入?

ddhy6vgd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(267)

这个问题在这里已经有答案了

如何防止php中的sql注入(28个答案)
两年前关门了。
大多数时候我都是这样做sql的:

$pdo = new PDO($dsn, $usr, $pass);

$qry = 'SELECT * FROM `my_table` WHERE `pk_id` = '. $id .';';
$res = $pdo->query($qry);

但最近我看到一些帖子显示,唯一安全的方法就是使用事先准备好的语句——这对我来说不是一个真正的问题,这可能有一个答案,只是一个我在谷歌上找不到的答案。
当然,如果我所有的陈述 .';' 使用concat可以吗?
谢谢,

km0tfn4u

km0tfn4u1#

不。
在sql中,如果在查询末尾提供两个分号,则不会给出错误。
因此,如果用户可以传递:

1; DROP TABLE users;

它将产生同样的结果,不管代码末尾是否添加了分号。
准备好的语句的巨大好处是没有数据被修改。它只发送两个查询。
这是一个很好的源代码,其中包含许多sql注入示例。

相关问题