gpt4 book ai didi

perl - 是否可以使用 DBD::Oracle 在单个查询中执行多个语句?

转载 作者:行者123 更新时间:2023-12-02 07:55:50 25 4
gpt4 key购买 nike

我想知道是否可以通过 Perl execute() 使用 do() 在单个 DBD::OracleDBI 调用中执行多个 SQL 语句。示例:

# Multiple SQL statements in a single query, separated by a ";"
$sql = 'UPDATE foo SET bar = 123; DELETE FROM foo WHERE baz = 456';

$sth = $dbh->prepare($sql);
$sth->execute;

# ...or...

$dbh->do($sql);

我问这个并不是因为我真的想做这样的事情,而是因为我想通过成功的 SQL 注入(inject)攻击来衡量可能造成的损害。是的,我知道,无论这个问题的答案如何,仍然必须使用绑定(bind)值和可信输入等从根本上消除 SQL 注入(inject)的可能性。但问题仍然存在:是否有可能使 DBD::Oracle 执行多条语句?

作为一个相关的例子,DBD::mysql 有一个 mysql_multi_statements 连接选项,它明确地启用了这个“特性”。我无法摆脱这样一种感觉,即有一些类似的、可能未记录且晦涩难懂的 Oracle OCI 选项可以通过 DBD::Oracle 以某种方式访问​​,这将实现相同的功能。

如果重要的话,这是:

  • perl 5.8.8
  • DBD::甲骨文 1.22
  • 甲骨文 11g (11.01.0700)

最佳答案

如果 SQL 注入(inject)攻击成功,攻击者难道不能简单地重复它并以这种方式运行多个语句吗?

Oracle 支持可以包含多个语句的匿名 PL/SQL block 。

“开始立即执行‘drop table customers’;立即执行‘drop table sales’;结束”

Oracle 在此处提供了避免 SQL 注入(inject)攻击的免费教程: http://st-curriculum.oracle.com/tutorial/SQLInjection/index.htm

关于perl - 是否可以使用 DBD::Oracle 在单个查询中执行多个语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com