バックグラウンド:
私は現在、エンタープライズCMSデータベース(ビジネスオブジェクト)用のJavaフロントエンドを開発しています。現在、ユーザーがカスタムデータベースクエリを作成できるようにする機能を作成しています。ユーザーがユーザーアクセスが承認された使用可能な列と演算子のサブセットのみを使用して選択できるようにするための対策をすでに実装しました(たとえば、SI_EMAIL_ADDRESSは選択できますが、SI_CUIDなどのより強力なフィールドは選択できません)。これまでのところ順調に進んでいますが、SQLインジェクション攻撃の可能性からこの機能を保護する時が来ました。
質問:
ユーザー入力文字列をエスケープするメソッドを探しています。私はすでにPerparedStatementを見てきましたが、データベースにアクセスするためにサードパーティのAPIを使用することを余儀なくされています。これらのAPIは私には不変であり、データベースへの直接アクセスは問題外です。個々のメソッドは、実行するクエリを表す文字列を受け取るため、PreparedStatementが無効になります(私の知る限り、これは直接データベース接続に対して実行する必要があります)。
String.replace()の使用を検討しましたが、可能であれば車輪の再発明はしたくありません。さらに、PerparedStatementを開発したセキュリティの専門家とはかけ離れています。
また、ある種のtoString()メソッドを見つけることを期待して、PerparedStatementのJavaAPIリファレンスも調べました。残念ながら、私はそのようなものを見つけることができませんでした。
どんな助けでも大歓迎です。前もって感謝します。
参照: