2011-06-26 19 views

回答

1

你必須逃避所有的用戶輸入,甚至包括諸如服務器變量之類的東西。如果一個值從數據庫中被提取出來,並且沒有被用戶輸入以任何方式觸及,那麼當在查詢中重用時,它不需要被轉義,除非它包含字符串連接傳入時會中斷該查詢的字符。

例如,我拉的名字O'Brien從數據庫到一個PHP變量$name,然後在另一份聲明試圖將它放回這樣的:

$query = "INSERT INTO table (id, name) VALUES (123, '$name');"; 

這將打破查詢,因爲我有未能擺脫O'Brien的'

1

您不必擔心這一點。如果數據庫中的值具有任何保留的名稱,則不會影響,因爲它不會被解釋。

你應該擔心sql注入,並確保你運行插入,刪除,選擇或更新來自用戶輸入數據的任何語句轉義單引號和其他字符。即使是普通用戶 - 沒有不良意圖 - 會使用單引號會導致錯誤。

如果用戶使用一個用戶名,如:

joe'; drop table users; -- 

你可能會遇到麻煩。

希望這會有所幫助!

+2

必填參考:http://xkcd.com/327/ –

+1

當然..這應該是一個標準答案! –

相關問題