MySQL表中有一列可以是0或1。如果用户没有输入0或1,那么我只将值设置为0。我想知道这个PHP代码是否可以"安全"地避免SQL注入:
$flag = $_GET["f"];
if ($flag != 1) $flag = 0;
$sql = "SELECT * from table WHERE column=$flag";
$db->query($sql);
我通常使用预先准备好的语句,但我想知道这段代码是否是充分的证明。如果这可以打破,那么我希望看到一个例子。
不,它不安全。SQL注入示例:1 OR 1 = 1
这等于1,因为(int)"1string" === 1
。
在将其传递给查询之前,我会考虑明确地进行(int)
强制转换:
$sql = "SELECT * from table WHERE column=".(int)$flag;