"mysqli_real_escape_string"足以防止SQL注入或其他SQL攻击吗?

10 浏览
0 Comments

"mysqli_real_escape_string"足以防止SQL注入或其他SQL攻击吗?

以下是我的代码:\n

  $email= mysqli_real_escape_string($db_con,$_POST['email']);
  $psw= mysqli_real_escape_string($db_con,$_POST['psw']);
  $query = "INSERT INTO `users` (`email`,`psw`) VALUES ('".$email."','".$psw."')"; 

\n请问这段代码是否安全,是否容易受到SQL注入攻击或其他SQL攻击的影响?

0
0 Comments

“mysqli_real_escape_string”是否足以防止SQL注入或其他SQL攻击?这个问题的出现是因为有人想知道是否使用该函数可以确保安全,或者是否容易受到SQL注入攻击或其他SQL攻击的威胁。

然而,从之前的讨论和参考链接可以得出结论,使用“mysqli_real_escape_string”函数并不足以防止SQL注入或其他SQL攻击。最好的防止SQL注入的方法是使用预编译语句(prepared statements)。预编译语句将数据(参数)与指令(SQL查询字符串)分开,不会让数据污染查询的结构。预编译语句解决了应用程序安全的一个根本问题。

如果无法使用预编译语句,例如在使用“LIMIT”时,使用严格的白名单来限制每个特定用途是确保安全的唯一方法。白名单是一个字符串字面值的列表,只有在白名单中的值才是安全的。

以上代码使用了预编译语句,并给出了一个严格的白名单示例。只有在白名单中的列名才会被使用,而且只有经过整数类型转换的$start和$howmany值才会被使用。这样可以确保查询的安全。

然而,即使使用了预编译语句和严格的白名单,也不能保证完全防止SQL注入或其他SQL攻击。因此,最好使用当下可用的最佳实践。

总之,“mysqli_real_escape_string”并不足以防止SQL注入或其他SQL攻击,最佳的防御方法是使用预编译语句和严格的白名单。但即使如此,也不能保证完全防止SQL注入或其他SQL攻击。

0