所以我有一个名为“转义”的函数,如下所示:
function escape($string){
$escaped_string = mysqli_real_escape_string($this->conn, $string);
return $escaped_string;
}
在运行查询之前,我在此处发送了一个变量(显然来自用户输入),因此出于安全原因将其转义。
现在,我知道可以使用array_walk将值的数组应用于此函数,但是我只是想知道是否有任何原因使我不应该这样做?我知道这听起来像一个愚蠢的问题,但是将其应用于用户输入的值而不是每个变量的数组将很容易。
通常,如果在创建函数时我会这样做:
function whatever($user_input){
$user_input = $this->escape($user_input);
$this->query("SELECT dog from pets where owner = '$user_input'");
e.c.t.
}
但是,如果我有很多用户从表单(例如id)中输入数据,则只需将数组传递给函数,然后在转义函数上使用array_walk即可避免麻烦。但是从安全角度来看,这又不是什么好主意吗?
答案 0 :(得分:3)
这种做法是臭名昭著的“ magic quotes”功能的转世,该功能曾经是该语言的一部分,但是现在谢天谢地,它不是。
这种方法对您没有好处,只会给您一种虚假的安全感,并且无缘无故破坏您的数据。
对于涉及PHP变量的所有数据库交互,必须使用准备好的语句。这是唯一100%安全的解决方案,这使相关功能过时了。
在这里,我有一个使用准备好的语句https://phpdelusions.net/mysqli_examples/prepared_select
的选择查询示例。通过简单的辅助功能,它比逃避驱动的混乱变成了更简单,更干净的解决方案