2017-08-10 45 views
1

我有一些工作代碼,用於在pdo準備語句中手動將每個變量綁定到其參數的繁瑣操作。我循環訪問$_POST數組,並根據html表單的名稱屬性動態地將變量綁定到params。從pdo預準備語句中的鍵值post數組循環bindParam

我的問題是,這樣做是否安全?我打開SQL注入?

這裏是我的代碼 -

if(!empty($_POST)){ 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $conn->prepare("INSERT INTO planes (name, description) VALUES(:name, :description)"); 

     foreach($_POST as $key => &$value){ 
      $key = ':'.$key; 
      $stmt->bindParam($key, $value); 
     } 

     $stmt->execute(); 
    } 
    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $conn = null; 
} 

回答

1

是的,它是安全的。如果您使用參數化查詢,則不會受到注入攻擊。

這就是說,似乎你在這裏重新發明輪子,而這往往不是正確的做事方式。然而;這超出了你的問題的範圍。

Also please see this very similar question那裏接受的答案是這樣說的:

使用預處理語句和參數化查詢。這些是由數據庫服務器獨立於任何參數發送並解析的SQL語句。這樣攻擊者不可能注入惡意SQL。

+1

你是什麼意思重新發明輪@catbadger我只是好奇的有用的見解。 –

+1

我的意思是你可以使用提供這種功能的許多框架之一,而不是自己編寫它。 – catbadger