0

私はいくつかの検索を行いましたが、SQL インジェクションに関する特定の質問があり、フィールド データのサニタイズなどを行うためにスティックの間違った端を取得している可能性があると思われるため、入力を取得できることを願っています:-

iSeries でストアド プロシージャを呼び出す Java プログラムがあります。ストアド プロシージャには、舞台裏で CL / RPG コードがあります。ストアド プロシージャは、Web ページからのデータを使用してパラメーターを介して呼び出されます。たとえば、呼び出しは次のようになります。

call library.prog('field1Value', 'field2Value')

Web サイトから「field1Value」などに入力された文字について心配する必要がありますか?それともストアド プロシージャ コールであるため、SQL インジェクションの危険性はありませんか? その処理の一部として、舞台裏の RPG プログラムが独自の SQL ステートメントで「field1Value」を使用するかどうかに依存しますか?

プロシージャに渡されるフィールドの長さは固定長であるため、たとえば、「危険な」文字を同等の html に変換することはできません。

これに関するフィードバック (必ずしも iSeries 固有である必要はありません) をお待ちしております (これはばかげた質問かもしれません!)。

4

3 に答える 3

1

これらのパラメーターを使用してproc自体で動的SQLを構築していない限り、問題はありません。

また、パラメータをチェックしてそれをきれいにすることはできません

ここを参照してください:SQLティーザー..これを保護してみてください

以下はSQLサーバーの構文です

私はこのようなprocを呼び出すことができます

prDropDeadFred ' declare @d varchar(100) select @d = reverse(''elbaTdaB,elbatecin elbat pord'') exec (@d)'

またはこのように

prDropDeadFred ' declare @d varchar(100) select @d = convert(varchar(100),0x64726F70207461626C65204E6963655461626C652C4261645461626C65) exec (@d)'

またはあなたが知らない他の5000の方法

于 2009-07-13T14:14:47.453 に答える
1

呼び出されたプログラムが入力パラメータを使用して動的SQLを構築する場合、情報を実行する別のプログラムに渡す場合、または後で他のプログラムの動的SQLに使用されるデータベーステーブルフィールドに情報を格納する場合は、安全ではない可能性があります。

于 2012-03-07T00:14:06.070 に答える
0

JDBC CallableStatement を使用している場合は安全です。CallableStatement は PreparedStatement の単なるサブタイプであり、SQL インジェクション攻撃は不可能です。これが真実ではないと私が考えることができる唯一の方法は、ストアド プロシージャが動的 SQL を実行している場合です。

于 2009-07-13T14:12:15.367 に答える