Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql:这是否安全到不使用预先准备好的语句?_Php_Mysql_Sql Injection - Fatal编程技术网

Php Mysql:这是否安全到不使用预先准备好的语句?

Php Mysql:这是否安全到不使用预先准备好的语句?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我知道,你应该总是使用事先准备好的陈述,我就是这么做的,但是!它们比较慢,如果有一些输入是100%安全的,我想我不能使用它们 (菲律宾) 说到这个特别愚蠢的例子,它虽然是多余的,但在技术上是安全的 但您必须了解,我们的代码并不总是局限于这样一个意大利面代码示例 首先,在正确设计的应用程序中,数据库交互与输入验证分离。数据库层根本不知道发送的变量是否“安全”。因此,将每个变量视为“不安全”并统一对待所有变量就简单多了 其次,想象一下,不只是一个愚蠢的变量,而是十几个。您的代码将变为多长时间 如果

我知道,你应该总是使用事先准备好的陈述,我就是这么做的,但是!它们比较慢,如果有一些输入是100%安全的,我想我不能使用它们

(菲律宾)


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

但您必须了解,我们的代码并不总是局限于这样一个意大利面代码示例

  • 首先,在正确设计的应用程序中,数据库交互与输入验证分离。数据库层根本不知道发送的变量是否“安全”。因此,将每个变量视为“不安全”并统一对待所有变量就简单多了
  • 其次,想象一下,不只是一个愚蠢的变量,而是十几个。您的代码将变为多长时间
  • 如果您计划混合使用不同的方法(准备好的和未准备好的),这仍然是没有意义的——它会无缘无故地使代码过于复杂。为什么不一直使用统一的解决方案呢

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

ctype\u digit
并转换为
int
在这里就足够了。
ctype\u digit
is\u int
都没有使用意义。只有在给定字符串中的所有字符都是数字的情况下,第一个才是真的,但添加了额外的假安全性,以支持我不使用准备好的语句的决定。支持这个决定太愚蠢了。你不能使用它们。但最好尽可能使用它们。如果有的话,开销可以忽略不计,这是最佳实践。如果您绝对不想使用它们,那么只有少数几个案例是合理安全的。其中一个正在转换为int,另一个正在使用字符串的白名单。但再次强调:准备好的声明是最好和最干净的方式。(另外:当我对PDO有疑问时,请听@YourCommonSense;))每当我做测试时,准备好的语句都会变慢,我想在这里使用的查询现在测试速度会变慢100%,我不知道为什么会变慢,但理论上,除非你运行多行,否则它们必须一直变慢。然后,首先,在我设计不当的应用程序中,数据库交互是在代码中进行的,其次,实际情况与示例一样愚蠢,只有一个整数,我对任何POST/GET输入都使用准备好的语句,但对于这种情况,只有这一个,一个整数,我不这么认为。然后,我的应用程序已经准备好了,而非准备好了,因为在我所有准备好的测试中,单行执行总是比较慢,所以对于“内部”安全查询,我不使用它们。因此,你不是在寻找正确的实践,而是寻找借口来保持你糟糕的方法。不要自吹自擂,你永远也得不到。我所追求的是效率,因为这一特定的查询效率是关键,你们中的一些人可能不使用高流量应用程序,这些应用程序的好处与效率有着高度的关系,但这里效率越高,钱就越多,这是最常用的查询之一。因此,我的观点是,重要的是客户满意度、好处和安全性,然后程序员必须投入泥潭,以最大限度地利用我提到的那些关键。那么,查询是否更快=是,(+金钱,更快地向用户交付数据),是否安全?显然是的,这就是我要问的。你所说的“效率”只是一种错觉。您永远不会注意到任何改进,使您的一些查询没有准备好。看看你的提问记录,我注意到你一直在为这些不良行为寻找借口。事实上,沿着这条路走下去,你会发现你的应用程序效率极低,这将在它达到高流量水平时显现出来。
if ( ctype_digit($_POST['id']) ){

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

  if ( is_int($int_id) ){

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

  }

}