Mysql:这是否安全,不应该使用预准备语句?

时间:2017-01-17 07:07:45

标签: php mysql sql-injection

我知道,你应该总是使用准备好的陈述......,这就是我所做的,但是!它们速度较慢,如果有一些100%安全的输入,我想我无法使用它们。

(PHP)

if ( ctype_digit($_POST['id']) ){

 $int_id = (int)$_POST['id'];

  if ( is_int($int_id) ){

   $query = "SELECT id FROM ids WHERE id = {$int_id}";

  }

}

1 个答案:

答案 0 :(得分:0)

谈到这个特别愚蠢的例子,它虽然是多余的,但在技术上是安全的。

但是你必须明白我们的代码并不总是局限于这样的意大利面条代码示例。

  • 首先,在设计合理的应用程序中,数据库交互与输入验证分开。并且数据库层不知道发送变量是否是"安全"或不。因此,将每个变量视为"不安全"并统一对待所有变量。
  • 其次,想象一下,不仅有一个愚蠢的变量,而且还有十几个。你的代码会变成多长时间?
  • 如果你计划使用混合的不同方法(准备好的和未准备好的),它仍然没有意义 - 它将无缘无故地复杂化你的代码。为什么不一直使用统一的解决方案?

此外,你的前提是完全错误的。准备好的陈述并不慢。