SQL インジェクションの影響
SQL インジェクション (SQLi) を使用すると、攻撃者はアプリケーションがデータベース [S1] に対して行うクエリを妨害できます。主な影響には、ユーザーのパスワード、クレジット カードの詳細、個人情報 [S1] などの機密データへの不正アクセスが含まれます。
データの盗難以外にも、攻撃者はデータベース レコードを変更または削除することが多く、アプリケーションの動作の永続的な変更やデータ損失につながります。重大度の高いケースでは、SQLi がエスカレーションされて、バックエンド インフラストラクチャを侵害したり、サービス拒否攻撃を可能にしたり、組織のシステム [S1][S2] に永続的なバックドアを提供したりする可能性があります。
根本原因: 安全でない入力処理
SQL インジェクションの根本原因は、SQL コマンド [S2] で使用される特殊要素の不適切な無効化です。これは、アプリケーションが外部から影響を受けた入力をクエリ文字列 [S1][S2] に直接連結することによって SQL クエリを構築するときに発生します。
入力がクエリ構造から適切に分離されていないため、データベース インタープリタは、ユーザー入力の一部をリテラル データ [S2] として扱うのではなく、SQL コードとして実行する場合があります。この脆弱性は、SELECT ステートメント、INSERT 値、または UPDATE ステートメント [S1] など、クエリのさまざまな部分で現れる可能性があります。
具体的な修正と緩和策
パラメータ化されたクエリを使用する
SQL インジェクションを防ぐ最も効果的な方法は、プリペアド ステートメント [S1] とも呼ばれる、パラメーター化されたクエリを使用することです。開発者は文字列を連結する代わりに、データとコード [S2] を強制的に分離する構造化メカニズムを使用する必要があります。
最小特権の原則
アプリケーションは、タスクに必要な最低限の権限 [S2] を使用してデータベースに接続する必要があります。 Web アプリケーション アカウントには管理者特権を持たせる必要はなく、その機能 [S2] に必要な特定のテーブルまたは操作に制限する必要があります。
入力の検証とエンコーディング
パラメータ化の代替ではありませんが、入力検証は多層防御を提供します [S2]。アプリケーションは、accept-known-good 戦略を使用し、入力が予期されるタイプ、長さ、形式 [S2] と一致することを検証する必要があります。
FixVibe がそれをテストする方法
FixVibe は、ゲート付き active.sqli スキャナー モジュールを介した SQL インジェクションをすでにカバーしています。アクティブ スキャンは、ドメイン所有権の検証と証明の後にのみ実行されます。このチェックでは、クエリ パラメーターを使用して同一オリジンの GET エンドポイントをクロールし、ベースライン応答を確立し、SQL 固有のブール値の異常を探し、複数の遅延長にわたるタイミング確認後の結果のみを報告します。リポジトリ スキャンは、テンプレート補間で構築された生の SQL 呼び出しにフラグを付ける code.web-app-risk-checklist-backfill を通じて、根本原因を早期に発見するのにも役立ちます。
