2013-07-26 51 views
-1

我在MySQL表中有一列可以是0或1.如果用戶不輸入0或1,那麼我只是將該值設置爲0. 我想知道這個PHP代碼是否「安全」從SQL注入:此代碼是否對SQL注入安全?

$flag = $_GET["f"]; 
if ($flag != 1) $flag = 0; 
$sql = "SELECT * from table WHERE column=$flag"; 
$db->query($sql); 

我通常使用準備好的語句,但我在想,如果這個代碼是完全的證明。 如果這可以被打破,那麼我想看一個例子。

+2

我不明白你爲什麼不直接使用準備好的語句,無處不在,始終,所以你不必想知道。 –

+0

@MattBall不是每個人都喜歡準備好的陳述。 – bwoebi

+0

這個問題似乎是無關緊要的,因爲它是關於冗餘安全分析和反駁查詢。 – mario

回答

3

不,它不安全。示例SQL注入:1 OR 1 = 1

這等於1,因爲(int)"1string" === 1

我認爲它明確地傳遞給查詢之前(int)投:

$sql = "SELECT * from table WHERE column=".(int)$flag; 
+0

確實。請參閱在php中輸入juggling以獲取更多信息:http://php.net/manual/en/language.types.type-juggling.php –

+0

他也可以將其比較改爲'if($ flag!== 1)' – Mike

+0

@Mike不,因爲'$ _GET [「f」]'(所以'$ flag')是字符串。 – bwoebi