SQLインジェクション
説明
SQLおよびNoSQLインジェクション攻撃の脆弱性をチェックします。SQLインジェクション攻撃は、クライアントからアプリケーションへの入力データを通じたSQLクエリの挿入または「インジェクション」で構成されます。成功したSQLインジェクションのエクスプロイトは、データベースから機密データを読み取ったり、データベースデータを変更したり(挿入/更新/削除)、データベースで管理操作を実行したり(DBMSのシャットダウンなど)、DBMSファイルシステム上に存在する特定のファイルの内容を回復したり、場合によってはオペレーティングシステムにコマンドを発行したりできます。SQLインジェクション攻撃は、SQLコマンドがあらかじめ定義されたSQLコマンドの実行を目的としてデータプレーンの入力にインジェクションされる一種のインジェクション攻撃です。このチェックは、リクエスト内のパラメータ(パス、クエリ文字列、ヘッダー、JSON、XMLなど)を変更して、SQLまたはNoSQLクエリに構文エラーを作成しようとします。その後、ログと応答が分析され、エラーが発生したかどうかが検出されます。エラーが検出された場合、脆弱性が存在する可能性が高いです。
修復
ソフトウェアは、アップストリームコンポーネントからの外部影響を受ける入力を使用してSQLコマンドのすべてまたは一部を構築しますが、ダウンストリームコンポーネントに送信されたときに意図したSQLコマンドを変更する可能性のある特殊な要素を中和しないか、誤って中和します。
ユーザー制御可能な入力でSQL構文が十分に削除または引用されない場合、生成されたSQLクエリは、それらの入力が通常のユーザーデータではなくSQLとして解釈される原因となる可能性があります。これは、クエリロジックを変更してセキュリティチェックをバイパスするため、またはバックエンドデータベースを変更する追加のステートメントを挿入するために使用でき、システムコマンドの実行が含まれる場合もあります。
SQLインジェクションは、データベース駆動型Webサイトで一般的な問題となっています。この欠陥は容易に検出され、容易に悪用されるため、最小限のユーザーベースを持つサイトまたはソフトウェアパッケージであっても、この種の攻撃を試みられる可能性があります。この欠陥は、SQLが制御プレーンとデータプレーンの間で実質的な区別をしないという事実に依存しています。