SQL 以字符串形式查询 - 不会被注入?
SQL Query as a string - safe from injection?
大部分时间我都是这样SQL的:
$pdo = new PDO($dsn, $usr, $pass);
$qry = 'SELECT * FROM `my_table` WHERE `pk_id` = '. $id .';';
$res = $pdo->query($qry);
但最近我看到一些帖子表明,唯一安全的方法是使用准备好的语句——这对我来说不是真正的问题,这可能有答案,只是我不能通过谷歌搜索找到。
当然,如果我的所有语句都以 .';'
结尾,使用 concat 可以吗?
谢谢,
没有。
在 SQL 中,如果您在查询末尾提供两个分号,它不会给出错误。
所以如果用户可以传递这个:
1; DROP TABLE users;
无论在代码末尾添加或不添加分号,它都会产生相同的结果。
准备好的语句的巨大好处是不会更改任何数据。它只是简单地发送两个查询。
Here 是一个很好的来源,其中包含很多 SQL 注入示例。
大部分时间我都是这样SQL的:
$pdo = new PDO($dsn, $usr, $pass);
$qry = 'SELECT * FROM `my_table` WHERE `pk_id` = '. $id .';';
$res = $pdo->query($qry);
但最近我看到一些帖子表明,唯一安全的方法是使用准备好的语句——这对我来说不是真正的问题,这可能有答案,只是我不能通过谷歌搜索找到。
当然,如果我的所有语句都以 .';'
结尾,使用 concat 可以吗?
谢谢,
没有。
在 SQL 中,如果您在查询末尾提供两个分号,它不会给出错误。
所以如果用户可以传递这个:
1; DROP TABLE users;
无论在代码末尾添加或不添加分号,它都会产生相同的结果。
准备好的语句的巨大好处是不会更改任何数据。它只是简单地发送两个查询。
Here 是一个很好的来源,其中包含很多 SQL 注入示例。