2016-08-14 40 views
0

此代碼檢查表單輸入值是否爲空,如果是 - 更新相關行(id)的相關MySql列。SQL準備語句和str_replace()的組合 - 是否安全?

str_replace()是否在準備語句(用於通過列循環)上運行使其易受攻擊?

此代碼是否安全?有更好的選擇嗎?

// get submitted form values 
$ids = $_POST['ids_edit_mult'];  
$exhibition_he = $_POST['exhibition_he_edit_mult']; 
$subjects_en = $_POST['subjects_en_edit_mult']; 
$subjects_he = $_POST['subjects_he_edit_mult']; 
$keywords_en = $_POST['keywords_en_edit_mult']; 
$keywords_he = $_POST['keywords_he_edit_mult']; 
$year = $_POST['year_edit_mult']; 
$sold = $_POST['sold_edit_mult']; 

$columns_array = array("exhibition_he", "subjects_en", "subjects_he", "keywords_en", "keywords_he", "year", "sold"); 
$values_array = array($exhibition_he, $subjects_en, $subjects_he, $keywords_en, $keywords_he, $year, $sold); 
$ids_array = explode(", ", $ids); 

for ($i1=0; $i1 < count($values_array); $i1++) { 
if ($values_array[$i1] != "") { 
    for ($i2=0; $i2 < count($ids_array); $i2++) { 

     // prepare statement for editing row values ($stmt1) 
     $sql_string = "UPDATE paintings_catalog SET column=? WHERE id=?"; 
     $sql = str_replace("column", $columns_array[$i1], $sql_string); 
     $stmt1 = $conn->prepare($sql); 

     // bind submitted row values 
     $stmt1->bind_param("si", $values_array[$i1], $ids_array[$i2]); 

     // edit row values 
     $stmt1->execute(); 
     } 
    } 
} 

回答

0

如果它是你的價值取代,而不是它的安全,如果它的用戶價值取代你比它不安全。在你的情況下,你用你的預定義值替換,這意味着用戶無法改變它們。

簡答題 - 對您的情況SAFE