2

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

# 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 注入攻击来衡量可能造成的损害。是的,我知道,不管这个问题的答案如何,仍然必须从根本上消除 SQL 注入的可能性,只使用绑定值和受信任的输入等。但问题仍然存在:是否可以DBD::Oracle执行多个陈述?

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

万一这很重要,这是:

  • perl5.8.8
  • DBD::Oracle1.22
  • 甲骨文 11g (11.01.0700)
4

1 回答 1

7

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

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

"开始立即执行'drop table customers';执行立即'drop table sales';结束"

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

于 2009-06-03T16:11:23.090 回答