在開發PHP應用程序時,我考慮過這種情況:用戶在表單中提交某種文本,然後在服務器上將文本轉義並插入到數據庫中。問題是:最後一個查詢中的SQL注入(使用DB的值)是否可能?通過輸入從逃脫的數據庫輸入SQL注入可能?
實例(我不認爲我要解釋我的數據庫類):
$db->query("INSERT INTO accounts SET test='".$db->escape($_POST["sometext"])."'");
好了,到目前爲止,我什麼都不知道會發生,在理論上我可以這樣做有準備的語句太,沒有區別。
有時以後需要在另一個腳本中使用列測試的值,並且需要將值插入其他位置。
所以列被選中,然後插入。
$db->query("SELECT test FROM accounts WHERE ... LIMIT 1");
$row = $db->fetchRow();
$db->query("INSERT INTO secoundtable SET test='".$row["test"]."'");
因此,您可以看到,數據庫的值用於上次查詢中。我必須在這裏逃生嗎?
是的,這可以像用戶最初發布時一樣注入。對於始終清理變量即使它來自您認爲是可信來源的變量,也有一個參數 – Orangepill
Escape **任何**和**全部**參數用於查詢。這裏沒有假設的餘地。即使錯過一次注入漏洞的代價也是巨大的。 – tadman