我想知道是否可以在一个execute()或do()调用中通过Perl DBI使用DBD::Oracle执行多个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注入攻击来评估可能的损害。是的,我知道,不管这个问题的答案是什么,使用绑定值和可信输入等在根上仍然必须消除SQL注入的可能性。但是问题仍然存在:是否可以让DBD::Oracle执行多个语句?
作为一个相关的例子,DBD::mysql有一个mysql_multi_statements连接选项,它显式地启用了这个“特性”。我无法摆脱这样的感觉,即有一些类似的、可能是无文档的、晦涩难懂的Oracle选项,可以通过DBD::Oracle以某种方式访问,从而实现同样的功能。
如果有关系,这是:
perl 5.8.8DBD::Oracle 1.22发布于 2009-06-03 16:11:23
如果SQL注入攻击成功,攻击者就不能简单地重复它并以这种方式运行多个语句吗?
Oracle支持匿名PL/SQL块,这些块可以包含多个语句。
“开始执行立即‘删除表客户’;立即执行‘删除表销售’;结束”
Oracle在这里提供了关于避免SQL注入攻击的免费教程:http://st-curriculum.oracle.com/tutorial/SQLInjection/index.htm
https://stackoverflow.com/questions/945584
复制相似问题