显然,如果我使用 JDBC/ODBC,我可以使用绑定变量和准备好的语句来防止 SQL 注入。但是,当数据被传递到最终调用 Oracle SQLPlus 的批处理时,有没有办法防止 SQL 注入?例如:
查询.sql:
select '&1' from dual;
exit;
如果我这样从 SQLPlus 调用这个脚本:
$ sqlplus SCOTT/TIGER @query.sql "x','y"
我将得到以下输出:
old 1: select '&1' from dual
new 1: select 'x','y' from dual
' '
- -
x y
如您所见,SQLPlus 命令行参数使用简单的宏替换。有没有我想念的替代方法?否则,我如何防止它被利用?