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

Joh*_*usa 2 security oracle perl sql-injection dbi

我想知道是否可以在单个中执行多个SQL语句execute()do()使用DBD::OraclePerl 调用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);
Run Code Online (Sandbox Code Playgroud)

我问这不是因为我想要真正做这样的事情,而是因为我想通过成功的SQL注入攻击来衡量可能造成的损害.是的,我知道,无论这个问题的答案是什么,SQL注入的可能性仍然必须在其根目录中使用绑定值和可信输入等来消除.但问题仍然存在:是否可以使DBD::Oracle执行多个声明?

作为相关示例,DBD::mysql有一个mysql_multi_statements显式启用此"功能" 的连接选项.我无法摆脱这样的感觉:有一些类似的,可能没有文档记录且模糊不清的Oracle OCI选项,可通过某种方式访问DBD::Oracle,从而实现同样的目的.

如果重要,这是:

  • perl 5.8.8
  • DBD::Oracle 1.22
  • Oracle 11g(11.01.0700)

Pla*_*mer 7

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

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

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

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