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 つを見つけることができませんでした。