将array_walk与mysqli_real_escape_string一起使用是不好的做法吗?

时间:2019-10-31 16:38:33

标签: php mysqli

所以我有一个名为“转义”的函数,如下所示:

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即可避免麻烦。但是从安全角度来看,这又不是什么好主意吗?

1 个答案:

答案 0 :(得分:3)

是的,绝对

这种做法是臭名昭著的“ magic quotes”功能的转世,该功能曾经是该语言的一部分,但是现在谢天谢地,它不是。

这种方法对您没有好处,只会给您一种虚假的安全感,并且无缘无故破坏您的数据。

对于涉及PHP变量的所有数据库交互,必须使用准备好的语句。这是唯一100%安全的解决方案,这使相关功能过时了。

在这里,我有一个使用准备好的语句https://phpdelusions.net/mysqli_examples/prepared_select

的选择查询示例。

通过简单的辅助功能,它比逃避驱动的混乱变成了更简单,更干净的解决方案