2010-06-12 71 views
0

我在我的代碼中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能夠防止我的PHP代碼中的SQL注入,否則我將不得不做更多的保護?Php sql注入保護

感謝

+0

不是,它不是。 mysql_real_escape_string只能幫助字符串 – 2010-12-27 14:54:43

回答

0

是的,但prepared statements更好。

+0

想解釋一下爲什麼? – symcbean 2010-06-12 23:21:26

+0

如果您將其作爲準備好的語句語法的一部分進行轉換,那麼意外地無法轉換變量會更困難,那麼如果您將六個變量連接成一個字符串。 – Quentin 2010-06-13 21:27:28

0

個人而言,我會放棄mysql擴展名並遷移到mysqli擴展名。 mysql擴展的問題在於它的舊版本,坦率地說,它很容易忘記逃離某些東西。

mysqli支持prepared statements,它也有一個OOP API,這使得它更容易開發。

當您開始使用prepared statements時,可以更輕鬆地跟蹤您的參數。它也會自動爲你逃脫。

0

我也建議在大多數情況下使用預準備語句,但只有插入來自用戶的可能是字符串的數據時纔有必要。準備好的陳述更加昂貴(性能),所以當你可以避免它們時,你可能應該這樣做。使用準備好的語句和/或數據庫事務有很多好處。除非你已經有了,否則你應該仔細研究它。

如果您從例如表單接收數值,您只需要通過將輸入轉換爲數字來確保數據質量(任何來自GET或POST的輸入始終被PHP視爲字符串,除非您將它們轉換爲字符串),並且任何惡意代碼將被刪除。

下面是一個例子:

$intCarAge = (int) $_POST['car_age']; 
mysqli_query("UPDATE cars SET car_age = " . $intCarAge . " WHERE id = '123' "); 

的 「(INT)」 中的輸入變量$ _POST [ 'car_age']對數(整數)的數據轉換。它可以在代碼中的任何變量之前添加。變量內的任何字母將被刪除,並保留任何數字。 You can read more about number conversion here.

希望我有任何幫助!