我對參數化查詢幾個基本問題我應該將輸入清理爲參數化查詢嗎?
考慮以下代碼:
$id = (int)$_GET['id'];
mysql_query("UPDATE table SET field=1 WHERE id=".$id);
現在使用參數化查詢
$sql = "UPDATE table SET field=1 WHERE id=?";
$q = $db->prepare($sql);
$q->execute(array($_GET['id']));
我的問題,同樣的事情是:
- 是否有任何情況下,第一個代碼(即與
(int)
cast)是不安全的? - 是代碼的第二件OK,或者我應該也投
$_GET['id']
爲int? - 是否有任何已知的所述第二片的代碼的漏洞?也就是說,如果我正在使用第二個查詢,是否有任何方法可以執行SQL攻擊?
re#3 - ...或MySQL。 – eggyal
@eggyal極不可能,但是。 – Tomalak
我擔心可能發生的攻擊,而不是輸入的正確性,但這仍然是一個好的方面。 (但是請注意,'is_numeric'也允許浮動) – nico