6

SQL インジェクション (およびチェックされていない入力のエスケープされていない文字による構文エラー) から保護するには、Prepared Statements を使用することが最善の方法であることを認識しています。

私の現在の状況は、あるサードパーティ アプリケーションから別のアプリケーションにデータを移動する Java コードを書いているところです。宛先アプリケーションは独自のバージョンの Sybase を使用しているため、JTDS JDBC ドライバーPreparedStatementは失敗しますが、ドライバーはこの特定の種類のデータベースではサポートされていない一時ストアド プロシージャを使用するためです。したがってStatement、私は作業するだけでよく、ユーザー入力は別のアプリケーションから来ているため、制御することはできません。

この同様の質問がありますが、Prepared Statement では処理できないテーブルなどのパラメーターがある問題の修正に焦点を当てています。私の場合は、単純な SQL ステートメントを使用しているため、異なります。を使用せずに次のようなものを複製するためのベスト プラクティスがあるかどうかを知りたいですPreparedStatement

PreparedStatement statement = connection.prepareStatement("UPDATE mytable SET value=? WHERE id=?");
statement.setInt(1, getID());
statement.setString(2,userInput);
statement.executeUpdate();

問題は、ユーザー入力を確実にサニタイズする方法だと思いますか? 私はそれを自分で最初からやろうとすることができますが、見逃すエッジケースが少なくとも1つある可能性が高いため、これは悪い考えのように思えます.私はこれまでに 1 つを見つけることができませんでした。

4

2 に答える 2

2

ESAPI ライブラリには、SQL の入力をエスケープする手順と、必要に応じて独自の db 固有のエンコーダを開発する手順があります。

于 2012-11-07T16:35:24.160 に答える