我想知道如果我的查詢是從SQL注入安全的。我的PHP SQL查詢安全嗎SQL注入?
下面是PHP代碼
$orderid = mysql_real_escape_string($orderid);
mysql_query("SELECT * FROM orders WHERE id =\"".$orderid."\"");
而且
如果最終用戶可以更改訂單ID,以他們想要的東西,有什麼事情他們做這裏最糟糕的情況?
我想知道如果我的查詢是從SQL注入安全的。我的PHP SQL查詢安全嗎SQL注入?
下面是PHP代碼
$orderid = mysql_real_escape_string($orderid);
mysql_query("SELECT * FROM orders WHERE id =\"".$orderid."\"");
而且
如果最終用戶可以更改訂單ID,以他們想要的東西,有什麼事情他們做這裏最糟糕的情況?
是的,你展示的例子是從SQL注入安全。
在$ orderid中沒有可以引入SQL注入的內容,假設您沒有使用具有bug #8378的古老版本的MySQL客戶端。如果您使用的是MySQL 4.1.20,5.0.22或5.1.11或更高版本,那麼您沒問題。
您收到的意見是關於樣式和最佳實踐。因爲你不用擔心你的backslashing報價和字符串連接等
查詢參數可以更容易使用。但是對於這個例子來說,查詢參數本質上並不安全。轉義和參數化都要求您保持一致地使用它們。
PHP的mysql擴展現已正式棄用,並且將在PHP的未來版本中刪除。這與編寫更安全的代碼有關,因爲mysql擴展不支持參數,而其他擴展mysqli和PDO確實支持參數。鼓勵
開發者開始使用或者和mysqli或PDO擴展現在,讓這種情況發生的時候,你不覺得自己無法無需重寫代碼升級PHP版本。
這可能會幫助您:http://phpmaster.com/migrate-from-the-mysql-extension-to-pdo/
標準SQL使用單引號來分隔字符串和日期文字。 MySQL也爲此支持雙引號,但這取決於SQL_MODE的設置。如果你希望你的代碼更加穩定和標準,那麼在字符串/日期文字中使用單引號。
此外,它更容易爲你,因爲你沒有反斜槓一個PHP的雙引號字符串中的單引號。
mysql_query("SELECT * FROM orders WHERE id = '".$orderid."'");
如果您id
列是一個整數,它也很容易和簡單的投$訂單ID爲一個整數,這也將是一種安全,使你的代碼更清潔和更簡單:
$orderid = (int) $orderid;
mysql_query("SELECT * FROM orders WHERE id = $orderid");
如果你的$的OrderID canot由終端用戶來改變你的要求是安全的。否則,此外,請確保$ orderid是整數(如果此建議有效)由simple(int)$ orderid; 編輯:jsut發現你正在使用DEPRECATED mysql_。改用PDO! –
SQL字符串應該用單引號括起來,順便說一句。如果在ANSI模式下,雙引號用於標識符。 – mario
如果他們能夠使orderid成爲他們想要的東西,那麼如何在這裏進行SQL注入? – VXSix