2011-01-27 32 views
1

我總是喜歡使用其他消毒方法(和準備的說明),但我在某些情況下,客戶不希望我改變他原始腳本中的單一行(即時只添加插件)mysql查詢+ sprintf =注入?

IM擔心有人可能會通過修改$ POST值利用這一點,他會怪我(如客戶通常做):

extract($_POST, EXTR_PREFIX_ALL, "POST"); 
$q = sprintf(ARQ, trim($POST_string)); 
$res = doexec($q); 
DEFINE("ARQ", "INSERT INTO library (string) VALUES ('%s')"); 

我嘗試了幾種組合,但所有我能得到一個錯誤,沒有mysql注入 所以,這是否足夠安全?

+3

不安全。 '%s`不會轉義數據。它只需要一個字符串放在它的位置。您需要查看`PDO` /`mysqli`並在將值放入查詢之前使用準備好的語句或對該值使用`mysql_real_escape_string`。 – 2011-01-27 18:44:14

回答

0

我想doexec調用一些不接受多個命令鏈接;?您仍然可以使用子查詢從其他表中插入密碼和其他敏感數據(假設用戶可以讀回他保存的數據 - 否則您可以使用timing attack)。如果文件系統安全性與數據庫訪問代碼一樣差,那麼可以使用SELECT INTO創建一個可執行的php腳本。