私が取り組んでいるプロジェクトには、JRuby/Java で記述された REST API があり、MySQL データベースにヒットして多数のレコードを取得するエンドポイントがあります。
ブール値チェックや範囲値など、1 つ以上の列を使用してクライアントがこれらのレコードをフィルタリングできるようにする必要があります。
これを行う最も簡単な方法は、文字列パラメーターを API に追加し、それを SQL ステートメントに追加することです。
総じて、開発チームはこれが悪い考えであることに同意しますが、代替手段は、SQL に変換されるフィルタリングにほぼ同じ構文を提供することです。SQL インジェクション パラメータの魅力は強力です。
だから私の質問は、これが安全なことである状況はありますか?
特に、事前に完全に解析され、そのように識別されている場合、WHERE 句を安全に使用することを検討できます。または、少なくとも、DROP、SELECT などの特定のトリガー ワードをチェックします。
また、仲介者として機能する (外部式を WHERE 句に変換または解析する) 優れたライブラリを誰かが知っていれば、それは素晴らしいことです。