在我的應用程序,我需要提供上傳csv和excel文件,然後用於更新數據庫的可能性。該文件包含+/-幾百萬行,所以我需要使用裝載本地數據INFILE:如何保護加載數據本地infile更新查詢針對sql注入
$stmt1 = $dbh->prepare("CREATE TEMPORARY TABLE ${prefix}tempskuEAN LIKE ${prefix}skuEAN");
$stmt4 = $dbh->prepare("LOAD DATA LOCAL INFILE '/ama/$aa[0]/CustomerUpload/$a.csv' INTO TABLE ${prefix}tempskuEAN FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' (seller_sku, EAN, fallback)");
$stmt5 = $dbh->prepare("UPDATE ${prefix}skuEAN a LEFT JOIN ${prefix}tempskuEAN b ON a.seller_sku = b.seller_sku SET a.EAN = b.EAN, a.fallback = b.fallback WHERE a.seller_sku = b.seller_sku");
$stmt6 = $dbh->prepare("DROP TEMPORARY TABLE ${prefix}tempskuEAN");
在$ stmt4的變量是由我的程序設定,所以他們不會是一個問題,但我我非常關心更新/插入值的安全性。有沒有什麼方法可以將本地負載數據與負載數據一起轉義而不會造成性能損失?
謝謝你的回答!這意味着我不需要擔心加載數據操作,但是之後的更新語句呢?如果我想進一步,我有一個沒有轉義的查詢字符串後,我的臨時表中的加載數據操作,然後運行更新查詢沒有這樣做正在準備(我沒有找到一種方式與$ stmt5這樣做),那麼在這個查詢中我沒有漏洞呢? – baao 2015-01-09 20:59:07
如果'$ stmt5'中存在漏洞,則它位於'$ {prefix}'變量的內容中。由'UPDATE'語句處理的列的值僅處理數據。 (我唯一看到的其他潛能是UPDATE目標表上的易受攻擊的UPDATE觸發器的角落情況...觸發器必須編碼以準備和執行動態SQL(甚至在觸發器中允許)。 UPDATE語句本身不容易受到表中存儲的「不安全」值的影響 – spencer7593 2015-01-09 21:42:14
好的,再次感謝!$前綴是由一個開關/白名單組成的,以避免此處的漏洞。 – baao 2015-01-09 21:45:55