-1

我在 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);

我通常使用准备好的语句,但我想知道这段代码是否完整。如果这可以被打破,那么我想看一个例子。

4

1 回答 1

3

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

这等于 1,因为(int)"1string" === 1.

我会考虑(int)在将其传递给查询之前显式转换:

$sql = "SELECT * from table WHERE column=".(int)$flag;
于 2013-07-26T23:32:06.660 回答