Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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 不使用预先准备好的语句截断表是否安全?_Php_Pdo_Sql Injection_Truncate - Fatal编程技术网

Php 不使用预先准备好的语句截断表是否安全?

Php 不使用预先准备好的语句截断表是否安全?,php,pdo,sql-injection,truncate,Php,Pdo,Sql Injection,Truncate,在我当前的项目中,我已经多次使用以下代码来清除一些表。以防万一,我用的不是PDO $clearResult = $db->query('TRUNCATE TABLE table_name'); 我目前正在检查和更新我以前的一些脚本,以确保它们都使用了预先准备好的语句,并且以减少(希望停止)sql注入的方式编写。不,实际查询中没有用户输入,因此没有注入的风险 您必须确保用户无法触发截断,除非他们获得授权。不,实际查询中没有用户输入,因此没有注入风险 但是,您必须确保用户不能触发截断,除非

在我当前的项目中,我已经多次使用以下代码来清除一些表。以防万一,我用的不是PDO

 $clearResult = $db->query('TRUNCATE TABLE table_name');

我目前正在检查和更新我以前的一些脚本,以确保它们都使用了预先准备好的语句,并且以减少(希望停止)sql注入的方式编写。

不,实际查询中没有用户输入,因此没有注入的风险


您必须确保用户无法触发截断,除非他们获得授权。

不,实际查询中没有用户输入,因此没有注入风险


但是,您必须确保用户不能触发截断,除非他们获得授权。

决定是否应使用准备好的语句的不是SQL操作。为了防止SQL注入,当允许绑定参数的查询中涉及任何变量时,应使用预处理语句。这不仅限于用户输入,任何变量都应该是一个有界参数,不管它来自哪里

在您的示例中,查询不需要任何变量,因此使用预处理语句没有任何安全好处


即使您的
table\u name
来自用户输入或变量,预处理语句也不是解决方案,因为无法绑定表名。

决定是否使用预处理语句的不是SQL操作。为了防止SQL注入,当允许绑定参数的查询中涉及任何变量时,应使用预处理语句。这不仅限于用户输入,任何变量都应该是一个有界参数,不管它来自哪里

在您的示例中,查询不需要任何变量,因此使用预处理语句没有任何安全好处


即使您的
table\u name
来自用户输入或变量,预处理语句也不是解决方案,因为无法绑定表名。

预处理语句对truncate查询没有影响

PDO准备的语句在使用用户输入运行查询时非常有用,因为它们允许您使用绑定参数等功能来清理用户输入

它们对于优化将运行多次的查询也很有用

您可能需要阅读一些PHP文档中准备好的语句-:

许多比较成熟的数据库支持“准备就绪”的概念 声明。它们是什么?它们可以被认为是一种 应用程序要运行的SQL的编译模板 可以使用可变参数进行自定义。备妥的陈述书 两大好处:

查询只需要分析(或准备)一次,但可以 使用相同或不同的参数执行多次。什么时候 准备好查询后,数据库将进行分析、编译和优化 其执行查询的计划。对于复杂的查询,可以使用此过程 占用足够的时间,使应用程序明显变慢 如果需要以不同的方式重复同一查询多次 参数。通过使用预先准备好的语句,应用程序可以避免 重复分析/编译/优化循环。这就是说准备好了 语句使用更少的资源,因此运行更快

参数为 准备好的报表不需要引用;司机自动驾驶 处理这件事。如果应用程序专门使用准备好的语句, 开发人员可以确保不会发生SQL注入(但是, 如果查询的其他部分是用unscaped构建的 输入,SQL注入仍然是可能的)。事先准备好的声明也是如此 非常有用,因为它们是PDO将模拟的唯一特性 不支持它们的驱动程序。这可以确保应用程序 能够使用相同的数据访问范式,而不考虑 数据库的功能


准备好的语句对truncate查询没有影响

PDO准备的语句在使用用户输入运行查询时非常有用,因为它们允许您使用绑定参数等功能来清理用户输入

它们对于优化将运行多次的查询也很有用

您可能需要阅读一些PHP文档中准备好的语句-:

许多比较成熟的数据库支持“准备就绪”的概念 声明。它们是什么?它们可以被认为是一种 应用程序要运行的SQL的编译模板 可以使用可变参数进行自定义。备妥的陈述书 两大好处:

查询只需要分析(或准备)一次,但可以 使用相同或不同的参数执行多次。什么时候 准备好查询后,数据库将进行分析、编译和优化 其执行查询的计划。对于复杂的查询,可以使用此过程 占用足够的时间,使应用程序明显变慢 如果需要以不同的方式重复同一查询多次 参数。通过使用预先准备好的语句,应用程序可以避免 重复分析/编译/优化循环。这就是说准备好了 语句使用更少的资源,因此运行更快

参数为 准备好的报表不需要引用;司机自动驾驶 处理这件事。如果应用程序专门使用准备好的语句, 开发人员可以确保不会发生SQL注入(但是, 如果查询的其他部分是用unscaped构建的 输入,SQL注入仍然是可能的)。事先准备好的声明也是如此 非常有用,因为它们是PDO将模拟的唯一特性 不支持它们的驱动程序。这确保ap