2011-01-05 69 views
2

您好,我一直在使用PHP和MySQL工作了一段時間。現在我正在使用PHP-Informix和PHP-Oracle環境。我一直使用mysql_real_escape_string來處理進入數據庫的數據。我目前正在研究Informix和Oracle數據庫服務器,並且不知道要通過諸如OCI8或odbc等驅動程序連接的數據庫的任何轉義函數。針對輸入進入Oracle數據庫的SQL注入進行消毒

有人可以解釋一下這些數據庫的安全措施。

+0

所以,你總是做錯了:)只有字符串應該逃脫。對於數字它沒有任何幫助 – 2011-01-05 21:43:17

+0

您會驚訝地發現一些SQL注入可能會帶來怎樣的危險! – 2011-01-06 02:35:05

回答

6

除非你正在做非常動態的查詢,否則不要做衛生處理。參數化的查詢是正確的的路要走。 Here's the PHP Documentation其中描述瞭如何做到這一點。

+1

+1參數查詢。 – Jeremy 2011-01-05 21:59:17

+0

我甚至不能想到你需要這樣做的「非常動態」的情況。如果您允許用戶輸入SQL代碼的任何部分,那麼他們應該是受信任的用戶。 – JOTN 2011-01-06 00:06:17

2

是的,Oracle綁定了可以自動防止SQL注入的變量。整潔,嗯? :) Adam Hawkes使用PDO庫。我個人使用oci8和oci_bind_by_name函數。

+0

其實,我不知道*任何* PHP!我知道其他使用PDO庫的人。它不是特定於OCI的,因此一旦您將它用於熟悉的數據庫,您可以切換到另一個數據庫而無需重新學習所有內容。不過,我也聽到了有關oci_bind_by_name的好消息。 – 2011-01-06 02:29:29

+0

我想,如果你的綁定變量包含一個'('在其中,那麼查詢將失敗。 – 2013-03-28 10:52:21