SQL Injection
SQL インジェクションは、攻撃者が悪意のある SQL 断片をクエリ文字列に継ぎ足し、データベースに意図しないコマンドを実行させる攻撃である。
目的
入力を通じた SQL クエリの改ざんを防ぎ、データベースの窃取や改変を防ぐ。
メカニズム
ユーザー入力が SQL 文字列に直接連結される場合(例:"SELECT * WHERE name='"+input+"'")、' OR 1=1 -- の入力で条件を回避できる。防御策はパラメータ化クエリ(プリペアドステートメント)、ORM、入力バリデーション、最小権限アカウントである。
ユースケース
- ログイン回避(' OR 1=1)
- データ漏えい(UNION SELECT)
- データ改ざん(UPDATE/DELETE)
- コマンド実行(xp_cmdshell)
例
- 入力
admin' --OutputBypasses password verificationComments out the password condition
よくあるエラー
- Building SQL with string concatenation
- Always use parameterized queries