可能重复:
停止PHP中SQL注入的最佳方法
如何使用PDO对输入进行消毒?
我正在通过$_GET
获取身份证。我刚开始使用PDO,我不确定这是否安全。显然,下面的代码使用$_GET
获取id。在将其放入查询之前,我根本没有对其进行清理。这安全吗?
<?php
if (isset($_GET['id'])) {
$blogid = $_GET['id'];
$post = $dbh->query("SELECT id, title, slug, body, image, author, date, category from blog WHERE id='$blogid' ORDER BY date DESC");
$row = $post->fetch(); ?>
在将其放入查询之前,我根本没有对其进行消毒
没有。一点也不安全。:)
你要么需要逃离它,要么使用一个事先准备好的语句。对于PDO,我会使用一个预先准备好的声明:
if (isset($_GET['id']) && is_string($_GET['id'])) {
$blogid = $_GET['id'];
$stmt = $dbh->prepare("SELECT id, title, slug, body, image, author, date, category from blog WHERE id= :id ORDER BY date DESC");
$stmt->execute(array('id' => $_GET['id']));
$row = $stmt->fetch();
}
在SQL查询中插入变量而不清除/转义变量是安全的。
如果您不想自己逃离它,您可以使用prepare
语句和bind
参数。
您可以查看PHP文档。。。
关于如何使用PDO准备:http://php.net/manual/en/pdo.prepare.php
如何使用参数绑定:http://www.php.net/manual/en/pdostatement.bindparam.php