アプリケーションが多くの条件に応じて異なるSQLを生成し、休止状態セッションcreateSQLQuery()を介してそれらを実行する既存のコードがあります。ここで、パラメーターは、通常の文字列置換として Java クラスに存在する SQL 文字列に連結されます。ここでの問題は、SQL インジェクションを防ぐ必要があることです。そのためには、getNamedQuery() を使用してパラメーターをバインドし、休止状態が特殊文字を処理するようにする必要があります。しかし問題は、条件付きでSQLを生成するため、文字列SQLをxmlファイルに移動することはオーバーヘッドです。そこで、特殊文字の検証を手動で行い、それを文字列クエリに追加して、そのまま実行することにしました。それで、私が見つけたPrepareStatementのソースをチェックすると、例外がスローされます
byte[] arrayOfByte1 = new byte[0];
try
{
arrayOfByte1 = CharsToBytes(this.OdbcApi.charSet, arrayOfChar);
}
catch (UnsupportedEncodingException localUnsupportedEncodingException) {
}
SQLインジェクションを排除するためにパラメータを文字列クエリと連結する前に、パラメータに対して上記と同じ種類のエンコーディングをJavaクラスで行うにはどうすればよいですか? または、文字列 sql を追加パラメーターとして保持し、休止状態を使用してクエリを実行する方法はありますか?