Command Palette

Search for a command to run...

用語集 SQL Injection (SQLi)

SQLインジェクション(SQLi)とは?

SQLインジェクション(SQLi)は、攻撃者が入力フィールドに悪意のあるSQL文を入力してデータベースを操作する攻撃の一種です。

この攻撃は、適切に検証やユーザー入力の処理を行わないアプリケーションを対象としており、パスワードやクレジットカードの詳細などの機密データへの不正アクセスを可能にします。

SQLインジェクションの仕組み

アプリケーションがユーザー入力を適切に検証せずにデータベースクエリに直接含めると、攻撃者はクエリの動作を変更して悪意のあるSQL文を入力することができます。

例えば:

SELECT * FROM users WHERE username = 'admin' AND password = '12345';

攻撃者は次のように入力することができます:

' OR '1'='1

結果として:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';

これにより常にtrueが返され、不正アクセスが許可されます。

サイバーセキュリティにおけるSQLインジェクションの重要性

SQLインジェクションは、サイバーセキュリティにおいて最も危険で古い技術です。このタイプの攻撃は、常にOWASP Top 10にリストされています。

小さな脆弱性でも攻撃者に以下を許可します:

  • データへのアクセス、変更、削除
  • 認証の回避
  • データベース上での管理操作の実行
  • システム全体の侵害

一般的なSQLインジェクションの種類

  • クラシックSQLi : ウェブフォームやURLパラメータを介した直接的なインジェクション。
  • ブラインドSQLi : 攻撃者がエラーメッセージや応答時間を通じて間接的にデータベース情報を推測。
  • ユニオンベースSQLi : UNION演算子を使用して複数のクエリの結果を結合。
  • エラーベースSQLi : データベースのエラーメッセージに依存して情報を抽出。
  • 時間ベースブラインドSQLi : サーバーの応答遅延を利用してクエリ結果を推測。

SQLインジェクションを防ぐ方法

1. パラメータ化クエリ(プリペアドステートメント)の使用

SQLコマンドがユーザー入力をデータとして扱い、実行可能なコードとして扱わないようにする。

cursor.execute("SELECT * FROM users WHERE username = ?", (username,))

2. 入力の検証とサニタイズ

ユーザーからのすべての入力を検証し、期待される文字のみを許可する。

3. ORMフレームワークの使用

PrismaやHibernateなどのフレームワークは、直接的なSQLの取り扱いを減少させる。

4. 最小特権の原則

ユーザーの権限を制限し、必要な権限のみを与える。

5. 定期的なセキュリティテスト

アプリケーションセキュリティテストツールを使用して、SASTDAST、またはIASTのようなツールを使用して、インジェクションの欠陥を早期に検出します。

現実世界での例

あるオンラインストアのウェブサイトが侵害され、攻撃者がログインフォームでSQLインジェクションを使用してデータベースからクレジットカードの詳細を抽出しました。

関連用語

次のステップ

アプリケーションを保護する準備はできましたか?次のステップを選択してください。

すでに500以上の企業がPlexicusでアプリケーションを保護しています

SOC 2 Compliant
ISO 27001 Certified
Enterprise Ready