如何在 Oracle SQLPlus 中防止 SQL 注入?

Dev*_*ers 1 sql oracle sql-injection sqlplus batch-file

显然,如果我使用 JDBC/ODBC,我可以使用绑定变量和预准备语句来防止 SQL 注入。但是,当数据传递到最终调用 Oracle SQLPlus 的批处理过程时,是否有办法防止 SQL 注入?例如:

查询.sql:

select '&1' from dual;
exit;
Run Code Online (Sandbox Code Playgroud)

如果我这样从 SQLPlus 调用这个脚本:

$ sqlplus SCOTT/TIGER @query.sql "x','y"
Run Code Online (Sandbox Code Playgroud)

我将得到以下输出:

old   1: select '&1' from dual
new   1: select 'x','y' from dual

' '
- -
x y
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,SQLPlus 命令行参数使用简单的宏替换。我缺少替代方法吗?否则,我如何防止它被利用?

Dav*_*dge 5

如果人们可以通过 sql*plus 访问您的数据库,并且您在脚本中拥有特权用户的用户 ID 和密码供他们阅读,那么无论如何您都已经向他们屈服了。SQL 注入是您最不用担心的。