2013-05-15 83 views
2

我有一個網址,則有效時是這樣的:SQL注入預防 - GET_VARS

site.com/page.php?id=12345 

我想明白,如果我們vunderable SQL注入。在這個特定的實例中,該值應該只是一個正整數值,因爲它是一個id號。我們有時會使用其他變量,可能是字母或文本字符串,例如搜索結果頁面。

用於提取ID變量的代碼的一個例子是在這裏:

$variable = "0"; 
if (isset($HTTP_GET_VARS["id"])) { 
    $variable = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]); 
} 

在獲得從URL可變的大多數情況下,它是接近這種方式。

這是否在做任何事情來防止sql注入?

我應該使用mysql_real_escape_string嗎?

我一直在閱讀有關預處理語句,但它似乎令人望而生畏,我們在網站上遍佈各處使用這些變量來處理大量頁面和查詢。在短期或中期內進行並取代它們是不可行的。

如果有另一種方法去驗證沒有準備好的語句的數據,任何建議將不勝感激。

在此先感謝。

+0

您正在使用哪個PHP版本? – BlitZ

+0

你應該使用'mysqli'或'pdo'而不是舊的,很快就會被棄用'mysql'函數。 – Cyclonecode

+1

使用準備好的語句檢查此問題http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php/14110189#14110189 –

回答

4

這是否在做任何事情來防止sql注入?

我應該使用mysql_real_escape_string?

如果有另一種方式。


每方式將要求所有的代碼重寫 - 這種方式或其他。

但是,選擇是你的。
如果網站的價值不值得努力改寫它 - 好吧,保持原樣。
如果價值很高 - 例如嘗試聘請某人做這項工作。