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