不正な SQL の実行 - SQL インジェクション
ユーザー入力を通じて不正な SQL 文を実行させる攻撃。データの漏洩・改ざん・削除が可能になる。
概念図
攻撃シナリオ
認証バイパスの例
bash
SELECT * FROM users WHERE id = '1' OR '1'='1'テーブル削除の例
bash
'; DROP TABLE users; --SQL インジェクションの仕組み
アプリケーションがユーザー入力を直接 SQL 文に埋め込む場合、攻撃者は入力値に SQL の構文を含めることで、意図しないクエリを実行させることができます。
例えば、ログインフォームで ' OR '1'='1 と入力すると、WHERE 句が常に真になり認証をバイパスできる可能性があります。
対策
- プリペアドステートメント(パラメータ化クエリ): SQL とデータを分離する。最も効果的な対策
- ORM の使用: SQL を直接書かない
- 入力値の検証: 型チェックやホワイトリスト
- 最小権限の原則: DB ユーザーの権限を必要最小限にする
- WAF(Web Application Firewall): 既知の攻撃パターンをブロック
関連トピック
XSS(クロスサイトスクリプティング)- 悪意あるスクリプトを Web ページに注入する攻撃手法。反射型・格納型・DOM Based の 3 種類がある。 CSRF(クロスサイトリクエストフォージェリ)- ログイン済みのユーザーに意図しないリクエストを送信させる攻撃。 コマンドインジェクション- ユーザー入力を通じてサーバー上で不正な OS コマンドを実行させる攻撃。サーバーの完全な制御を奪われる可能性がある。 DB アクセス制御- データベースへのアクセスを適切に制限する仕組み。最小権限の原則に基づき、ユーザー・ロール・権限を管理する。 セキュアコーディングの基本- 安全なコードを書くための基本原則。入力検証・最小権限・エラーハンドリングの3原則で大半の脆弱性を防止できる。 