インジェクション攻撃
更新日:
用語解説
外部入力がデータではなくSQL、OSコマンド、LDAP式、HTTPヘッダなどの命令・構造として解釈され、攻撃者が意図しない処理を実行させる攻撃です。
■ 試験で押さえるポイント
SQLインジェクションは入力をSQL文字列へ連結する実装で生じます。プレースホルダを用いたパラメータ化、DB権限の最小化、動的識別子の許可リストで防ぎます。
OSコマンドインジェクションはシェルへ入力を渡す実装で起きます。シェルを介さない安全なAPIを使い、引数を分離し、実行権限を限定します。
HTTPヘッダインジェクションは改行等でヘッダ構造を壊します。フレームワークのヘッダAPIを使い、改行を拒否します。
単一のエスケープ処理を全注入先へ流用できません。SQL、シェル、HTML、URLなど解釈文脈ごとの対策が必要です。
WAFは緩和・検知に役立ちますが、アプリケーションの安全な実装を置き換えません。
■ 過去問での着眼点
注入先がSQLならSQLインジェクション、OSのシェルならOSコマンドインジェクション、HTTPヘッダならヘッダインジェクションです。根本対策は、命令と外部入力を構造的に分離することです。
例: 検索値を`SELECT ... WHERE name = ?`のプレースホルダへ束縛すれば、入力中の引用符やSQL断片は命令ではなく値として扱われます。