SQL Injection
Overview
SQLインジェクションについてまとめる。
Resource
ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)
SQLインジェクションのテスト
フォームnおフィールドに以下のような文字列を入力し、意図しない動作(エラーや不正なデータ取得)が起こらないかを確認する。
- もし全データが取得されるならSQLインジェクションの影響を受けている可能性あり。
- 予期しないエラーが出る場合も、クエリが適切に処理されていない可能性あり。
- q.toSQL() を使って発行されるSQLをログに出力し、不正なSQLが含まれていないかチェック。
<form method="POST" action="/search">
<input type="text" name="gameTitle" value="' OR '1'='1">
<button type="submit">検索</button>
</form>
フォームに入れるテストデータ一覧
| 番号 | テスト文字列 | 目的 |
|---|---|---|
| 1 | ' OR '1'='1 | 全データ取得攻撃 |
| 2 | test' -- | クエリを途中で打ち切る |
| 3 | ' UNION SELECT 1,2,3,4 -- | データ漏洩 |
| 4 | % _ ' " ; -- | 特殊文字の処理確認 |
| 5 | % | ワイルドカードによる意図しないデータ取得 |