もちろん、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 コマンド ライン パラメータは単純なマクロ置換を使用しています。私が見逃している別の方法はありますか?それ以外の場合、これが悪用されるのを防ぐにはどうすればよいですか?