使用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

上一篇: Securing From SQL Injection With PDO API?

下一篇: Multiple INSERT vulnerable to injection?