2

execute()1つのSQLステートメント内で複数のSQLステートメントを実行できるかどうか、またはPerlを介してdo()呼び出しを実行できるかどうかを知りたいです。例:DBD::OracleDBI

# 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
  • Oracle 11g(11.01.0700)
4

1 に答える 1

7

SQLインジェクション攻撃が成功した場合、攻撃者はそれを繰り返して、そのように複数のステートメントを実行することはできませんか?

Oracleは、複数の文を含むことができる匿名PL/SQLブロックをサポートしています。

"即時実行'ドロップテーブル顧客';即時実行'ドロップテーブル販売';終了"

オラクルは、SQLインジェクション攻撃を回避するための無料のチュートリアルをここで提供しています: http ://st-curriculum.oracle.com/tutorial/SQLInjection/index.htm

于 2009-06-03T16:11:23.090 に答える