可能重複:
Are PDO prepared statements sufficient to prevent SQL injection?使用PDO API保護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語句標記存儲在某處以合併這些標記,那麼PDO就足夠了。 – arkascha
@arkascha我是新來的使用API,我習慣於需要手動輸入保護使用預定義函數的MySQL API。 那麼你說什麼,PDO保護它不是來自注射? –
PDO不保護自己,如果使用「準備好的語句」,它會保護您的查詢。你首先準備一個帶有佔位符的聲明。您在執行期間將值綁定到這些佔位符。這就是所謂的「綁定」。檢查Andy Lesters答案如下。 – arkascha