我在我的代碼中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能夠防止我的PHP代碼中的SQL注入,否則我將不得不做更多的保護?Php sql注入保護
感謝
我在我的代碼中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能夠防止我的PHP代碼中的SQL注入,否則我將不得不做更多的保護?Php sql注入保護
感謝
是的,但prepared statements更好。
個人而言,我會放棄mysql
擴展名並遷移到mysqli
擴展名。 mysql
擴展的問題在於它的舊版本,坦率地說,它很容易忘記逃離某些東西。
mysqli
支持prepared statements,它也有一個OOP API,這使得它更容易開發。
當您開始使用prepared statements時,可以更輕鬆地跟蹤您的參數。它也會自動爲你逃脫。
我也建議在大多數情況下使用預準備語句,但只有插入來自用戶的可能是字符串的數據時纔有必要。準備好的陳述更加昂貴(性能),所以當你可以避免它們時,你可能應該這樣做。使用準備好的語句和/或數據庫事務有很多好處。除非你已經有了,否則你應該仔細研究它。
如果您從例如表單接收數值,您只需要通過將輸入轉換爲數字來確保數據質量(任何來自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.
希望我有任何幫助!
不是,它不是。 mysql_real_escape_string只能幫助字符串 – 2010-12-27 14:54:43