代码之家  ›  专栏  ›  技术社区  ›  John Siracusa

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

  •  2
  • John Siracusa  · 技术社区  · 17 年前

    我想知道是否有可能在单个SQL语句中执行多个SQL语句 execute() do() DBD::Oracle 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 有a mysql_multi_statements DBD::Oracle

    如果重要的话,这是:

    • perl
    • DBD::Oracle
    • 甲骨文11g(11.01.0700)
    1 回复  |  直到 17 年前
        1
  •  7
  •   Plasmer    17 年前

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

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

    “立即开始执行‘直销客户’;立即执行‘直销销售’;结束”

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

    推荐文章