【发布时间】:2016-11-10 10:20:57
【问题描述】:
所以我知道,由于查询格式不佳,使用带有占位符的准备好的语句几乎是保护自己免受 SQL 注入的唯一方法。但是,我也看到很多人建议,尽管 mysqli_real_escape_string 不安全,但在变量 is 周围使用单引号。例如(注意查询中的单引号):
$value1 = mysqli_real_escape_string($value1);
$value2 = mysqli_real_escape_string($value2);
$value3 = mysqli_real_escape_string($value3);
mysqli_query("INSERT INTO table (column1, column2, column3)
VALUES ('" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
那么:当只处理整数和字符串时,上面的例子是否和使用mysqli准备好的语句和占位符一样安全?
【问题讨论】:
-
不,无论您处理的是哪种数据类型,不使用准备好的语句将永远像使用它们一样安全。跨度>
-
@Don'tPanic - 我同意你的逻辑。有什么证据可以指点我吗?
-
基本上,绑定到准备好的语句的参数本质上将被解释为数据。实际上没有办法强制它们被解释为命令。
-
这确实解释了为什么准备好的语句是安全的。但我的问题是
mysql_real_escape_string的这种特定用法是否也安全,因为它可以正确格式化任何可能的字符串或整数。
标签: php mysqli prepared-statement mysql-real-escape-string