是否有東西可能會逃脫我的腳本中的衛生設施,或者是否安全?大多數 SQL注入?我理解它的方式,如果您將查詢作爲準備好的參數傳遞,則查詢的構建方式並不重要,對嗎?這個動態SQL查詢生成是否安全注入?
EDIT2:我編輯的代碼,以反映的結合$ _ POST值
$q = $pdo->prepare('SHOW COLUMNS FROM my_table');
$q->execute();
$data = $q->fetchAll(PDO::FETCH_ASSOC);
$key = array();
foreach ($data as $word){
array_push($key,$word['Field']);
}
$sqlSub= "INSERT INTO other_table(";
$n = 0;
foreach ($key as $index){
$sqlSub = $sqlSub.$index.", ";
$n = $n + 1;
}
$sqlSub = $sqlSub.") VALUES (";
for ($i=1; $i<$n;$i++){
$sqlSub = $sqlSub."?, ";
}
$sqlSub = $sqlSub.."?)";
$keyValues = array();
for($i=0;i<n;$i++){
array_push($keyValues,$_POST[$key[$i]]);
}
$q->$pdo->prepare($sqlSub);
q->execute($keyValues);
編輯建議:這是最終的查詢的樣子建議後修改
INSERT INTO other_table($key[0],...,$key[n]) VALUES (?,...,nth-?);
'如果您將查詢作爲準備好的參數傳遞,那麼查詢的構建方式如何......錯誤並不重要。是的,這仍然是脆弱的。事實上,就像您沒有準備查詢一樣,您也同樣脆弱。使這個sql注入安全的方法不是僅準備查詢,而是使用佔位符準備查詢並將值綁定到這些佔位符。 –
不!如果你不使用綁定你的值,你是不安全的。 – aynber
不,如果你想使它安全的話,使用'Describe'或'Explain'數組鍵的列表可以被改變,如果它們是表單輸入的名字,例如列表中的列可以交叉檢查它們。然後使用準備好的語句來獲取這些值,並使用白色的鍵列表。 – ArtisticPhoenix