SQL Query作为字符串 - 从注入安全吗?

时间:2018-05-02 12:19:28

标签: php mysql pdo prepared-statement

我大部分时间都在这样做SQL:

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

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

但是最近我看到一些帖子显示安全的唯一方法是使用准备好的语句 - 这对我来说不是一个问题,这可能有一个答案,只有一个我找不到的答案谷歌搜索。

当然,如果我的所有陈述,以.';'结尾使用concat都可以吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

没有。

在SQL中,如果在查询结尾处提供两个半冒号,则不会出错。

因此,如果用户可以传递此信息:

1; DROP TABLE users;

它会产生相同的结果,在末尾添加或不添加代码中的半冒号。

准备好的陈述的巨大好处是没有数据被改变。它只是发送两个查询。

Here是一个很好的源代码,它包含很多SQL注入示例。