タイトルの通り、SQLインジェクション対策として、文字のエスケープ処理を行おうと考えています。
言語はJavaです。StringクラスのreplaceAllメソッドを使おうと考えています。
例えば以下の文字列の場合、
"AAA%BBB\%CCC"
%という字を\%に置き換えようと思うのですが、そのまま%を\%に変更してしまうと、
"AAA\%BBB\\%CCC"
となってしまいます。
これを防ぐため、1つ前の文字が\以外の文字の場合にのみ置換を行うようにしたいのですが、うまく行きません。
例えば
replaceAll("[^\\\\]%","\\\\%");
という風にすると、
"AA\%BBB\%CCC"
という風に1文字欠けてしまいます。
また、' (シングルクオーテーション)も同じような問題をかかえています。
単純に'を''に変えるのではなく、''となっている物はそれ以上変更を加えたくないのです。
・・・そもそも本来、そういう文字列が渡されないような仕様にするべきなのですが、それもなかなか安心できず、出来れば実装したいのです。
どなたか方法を教えて頂けないでしょうか。
No.2ベストアンサー
- 回答日時:
MicrosoftのAccessしか使ったことがない者ですが・・・
> 1つ前の文字が\以外の文字の場合にのみ置換を行うようにしたい
以下のような手順を踏むというのはいかがでしょうか;
1)変換されたくない「\%」を、別の文字に置き換える
*データに含まれてない文字であることが大前提になります*
(私の場合は、「§」を使用しています)
2)「%」を「\%」に変換
3)最初に置き換えた文字を、「\%」に再変換
こうすれば、「"AAA%BBB\%CCC"」を「"AAA\%BBB\%CCC"」に変換
することができます。
独学・我流なのでセオリーを外しているかもしれませんが、参考までに。
お返事をお待たせして申し訳ありません。
実は質問した直後に解決してしまったのです。
結論としてはpreparedStatementのエスケープ処理に依存する形としました。
本当にありがとうございました。
No.3
- 回答日時:
がると申します。
ちと質問なのですが。
"AAA%BBB\%CCC"
という文字列をどのように変換されたいのでしょうか?
通常、エスケープ処理ですと
"AAA\%BBB\\\%CCC"
だと思われるのですが、どうでしょうか?
要求されているoutputによって、返答が異なってしまうので。
お返事をお待たせして申し訳ありません。
実は質問した直後に解決してしまったのです。
結論としてはpreparedStatementのエスケープ処理に依存する形としました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++ マルチバイト文字とUniCod...
-
マクロで半角を全角に
-
シフトJIS⇒MIMEエンコード(RFC2...
-
VBA ASC関数で変換できない文...
-
文字列の置換についての質問です。
-
カンマの含まれる文字列の数値...
-
VB6.0 Base64のデコード方法を...
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
ファイルから読み取った改行文...
-
半角英数字のみを受け付ける入...
-
ダブルコーテーション(
-
SJISで取得した半角カナをUTF-8...
-
C++でのCRLFについて
-
改行について
-
エクセルでの漢字、カタカナ、...
-
phpのメールフォームの完了画面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数値をASCII文字にする方法につ...
-
カンマの含まれる文字列の数値...
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
マクロで半角を全角に
-
VB6 機種依存文字の変換
-
1バイト文字の上位4ビット・...
-
VC++ マルチバイト文字とUniCod...
-
VBA ASC関数で変換できない文...
-
preg_replaceがうまくできない
-
ヌル文字とは一体何でしょうか
-
Perlで値が文字列か数値かを区...
-
エスケープされたunicodeのデコ...
-
VB6.0 Base64のデコード方法を...
-
フォームからPOSTした際ボーダ...
-
int temp = 0; if(isdigit(arr[...
-
サロゲートペア文字の半角カナ...
-
ケータイの絵文字
-
HTMLエンティティ文字の変換
-
シフトJIS⇒MIMEエンコード(RFC2...
おすすめ情報