1

我正在尝试在帖子中发送表名,但这是否受到足够的保护?

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);                                                                   
$naam = $_POST['naam']; 
$sql = "INSERT INTO ".$naam." (".$rows.") VALUES (".$values.")";

我也试过

$naam = $db->quote($_POST['naam']);

这也不起作用。最佳结果是否足够安全?

另:完整代码

它在我的数据库中插入

a1, a2 and a3: d

什么时候

a1 = a a2 = s a3 = d

try{
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);                                                                   

    $naam = $_POST['naam']; 

    $sql = "
        INSERT INTO ".$naam." (".$rows.")
        VALUES (".$values.")
        ";                                                              

    $stmt = $db->prepare($sql);                                         

 for ($i = $_POST['begin'] ; $i < $iets ; $i++){
     $anum = 'a'.$i;
     $avalue = $_POST[$anum];
     $stmt->bindParam($anum, $avalue, PDO::PARAM_STR);
     printf ("%s, %s||", $anum, $avalue);
    }
    printf ("%s, %s||", $rows, $values);
    $stmt->execute();                                                                                                                                       
}                                                                       
catch(PDOException $e)                                                  
{                                                                       
    echo '<pre>';                                                       
    echo 'Regel: '.$e->getLine().'<br>';                                
    echo 'Bestand: '.$e->getFile().'<br>';                              
    echo 'Foutmelding: '.$e->getMessage();                              
    echo '</pre>';                                                      
}
4

1 回答 1

1

用户可以完全控制将数据插入哪个表。而且你没有充分利用 pdo。在查询中使用参数。

$sql = "INSERT INTO table_name (col1,col2) VALUES (:val1, :val2)";

$stmt = $this->_db->prepare($sql); 
$stmt->bindParam(':val1', $value1, PDO::PARAM_INT); 
$stmt->bindParam(':val2', $value2, PDO::PARAM_STRING); 

这里的表名是硬编码的,列也是硬编码的。并且这些值将自动转义。

于 2012-12-14T19:39:47.277 回答