使用PDO API保护SQL注入?
可能重复:
PDO准备的语句是否足以防止SQL注入?
我推出一个新的API的主要担忧是安全。
我是PDO用法的初学者,但知道主要结构。 但我不知道如何保护来自SQLInjection的查询。
我的代码如下:
<?php
$Start = new Db();
class Db
{
private $dbh = null;
public function __construct()
{
$this->dbh = new PDO('mysql:host=localhost;dbname=pdo', 'root', 'xxxxx');
}
public function PDOFetch($Var)
{
$sth = $this->dbh->prepare("$Var");
$sth->execute();
$result = $sth->fetchAll();
return $result;
}
public function PDONumb ($Var)
{
$sth = $this->dbh->prepare("$Var");
$sth->execute();
$count = $sth->rowCount();
return $count;
}
public function PDODel ($Var)
{
$Delete = $this->dbh->exec("$Var");
return $Delete;
}
public function PDOQuery ($Var)
{
$Query = $this->dbh->query("$Var");
return $Query;
}
}
?>
我将如何去关于防止SQL注入和其他漏洞?
编辑:
查询被传递到API中的例子是从“index.php”页面完成的。
一条线将是:
$Num = $Start->PDONumb("SELECT * FROM news");
但后来,当我用这个覆盖我的曲目。 我想用这个更先进,所以它会传递用户定义的变量(因此SQL注入问题)
但目前正在通过的查询由管理员定义。
如果您使用不受信任的数据创建不安全的SQL语句,那么不管它们是否在PDO中执行都没关系。 您仍然可以开放SQL注入。
例如,如果您从Web获得$userid
,并且您构建:
$sql = "SELECT * FROM users WHERE userid=$userid";
该SQL语句对于SQL注入是开放的,因为如果$userid
的值是0; DROP TABLE users;
0; DROP TABLE users;
,那么你将创建的SQL将是
SELECT * FROM users WHERE userid=0; DROP TABLE users;
不管你是否通过PDO来执行它:你仍在执行一个坏人向你发送的代码。
要正确使用PDO,您需要绑定您的参数。
与您的问题无关,但新手经常遇到的一个重要问题是:没有必要在单个变量上加双引号。 你的代码
$Delete = $this->dbh->exec("$Var");
会写得更好
$Delete = $this->dbh->exec($Var);
链接地址: http://www.djcxy.com/p/93743.html