
ヘディングのテキスト### 前提・実現したいこと
Java8(Spring4.3)で作られたWebアプリでブラインドSQLインジェクション対策をしようと考えています。
発生している問題・エラーメッセージ
JavaにはShift_JIS環境でも安全にSQLをエスケープできるライブラリは無いのでしょうか。
PHPでいうpg_escape_stringのようなものを探しています。
該当のソースコード
Java
1Int cnt = 0; 2StringBuffer buff = new StringBuffer(); 3 4buff.append("select columnA, columnB, columnC, ・(中略)・ from FooTable"); 5 6If(CanGetParamA){ 7 If(cnt = 0){ 8 buff.append("Where ColumnA = '"); 9 buff.append(paramA); 10 buff.append("'"); 11 }else{ 12 buff.append("and ColumnA = '"); 13 buff.append(paramA); 14 buff.append("'"); 15 } 16} 17 18If(CanGetParamB){ 19 If(cnt = 0){ 20 buff.append("Where ColumnB = '"); 21 buff.append(ParamB); 22 buff.append("'"); 23 }else{ 24 buff.append("and ColumnB = '"); 25 buff.append(ParamB); 26 buff.append("'"); 27 } 28} 29 30If(CanGetParamC){ 31 If(cnt = 0){ 32 buff.append("Where ColumnC = '"); 33 buff.append(ParamC); 34 buff.append("'"); 35 }else{ 36 buff.append("and ColumnC = '"); 37 buff.append(ParamC); 38 buff.append("'"); 39 } 40} 41 42(以下同じ条件式が続き中略) 43 44If(CanGetParamH){ 45 buff.append("order by '"); 46 buff.append(ParamH); 47 buff.append("'"); 48 } 49} 50 51buff.append(";"); 52String sql = buff.toString(); 53ResultSet rs = stmt.executeQuery(sql); //コネクション作成及びステートメント作成は略
試したこと
・ライブラリ調査(途上)
・以下の置換を行う自作メソッド作成(5c問題に対応できず断念)
' ⇒ ''
\ ⇒
; ⇒ ;
% ⇒ %
_ ⇒ _
補足情報(FW/ツールのバージョンなど)
RDBMSはOracle12cです。
尚、古い携帯にも対応させる為、文字コードはShift_JISから変更できず
内部でUTF-8、出力時にShift_JISといった変換もできません。
当初プレイスホルダの使用(StatementクラスからPreparedStatementクラスへの変更、
setStringやsetIntメソッドの使用)を提案しましたが、
改修コスト及びテストコストより却下され、サニタイズのみで対応する事となりました。

