Можно ли выполнить несколько операторов в одном запросе, используя DBD :: Oracle? - PullRequest
1 голос
/ 03 июня 2009

Я хотел бы знать, возможно ли выполнить более одного оператора SQL в одном execute() или do() вызове с использованием DBD::Oracle через 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, которая включит то же самое.

Если это имеет значение, это:

  • perl 5.8.8
  • DBD::Oracle 1,22
  • Oracle 11g (11.01.0700)

1 Ответ

7 голосов
/ 03 июня 2009

Если есть успешная атака с использованием SQL-инъекции, может ли злоумышленник просто повторить ее и выполнить несколько операторов таким же образом?

Oracle поддерживает анонимные блоки PL / SQL, которые могут содержать несколько операторов.

"начать выполнение немедленного« сброса таблицы клиентов »; выполнить немедленное« сброса таблицы продаж »; конец»

Oracle предоставляет бесплатное руководство по предотвращению атак SQL-инъекций здесь: http://st -curriculum.oracle.com / учебник / SQLInjection / index.htm

...