我大部分时间都在这样做SQL:
$pdo = new PDO($dsn, $usr, $pass);
$qry = 'SELECT * FROM `my_table` WHERE `pk_id` = '. $id .';';
$res = $pdo->query($qry);
但是最近我看到一些帖子显示安全的唯一方法是使用准备好的语句 - 这对我来说不是一个问题,这可能有一个答案,只有一个我找不到的答案谷歌搜索。
当然,如果我的所有陈述,以.';'
结尾使用concat都可以吗?
谢谢,
答案 0 :(得分:2)
没有。
在SQL中,如果在查询结尾处提供两个半冒号,则不会出错。
因此,如果用户可以传递此信息:
1; DROP TABLE users;
它会产生相同的结果,在末尾添加或不添加代码中的半冒号。
准备好的陈述的巨大好处是没有数据被改变。它只是发送两个查询。
Here是一个很好的源代码,它包含很多SQL注入示例。