SQLインジェクション攻撃でよく使われる文字列やキーワードには、以下のようなものがあります。これらは、悪意のあるユーザーが意図的に入力することでSQLクエリを改ざんし、データベースに不正な操作を実行させることを目的としています。
1. 基本的な文字列
-
--(ダブルハイフン):以降の文字列をコメントアウトし、SQL文の一部を無効にします。 -
'; --、'; DROP TABLE users; --:閉じシングルクォートとコメントアウトを組み合わせて意図しないSQL文を追加する。 -
'; DELETE FROM table; --:テーブルの内容を削除する攻撃。 -
OR '1'='1':無条件で「真」にする条件を追加して、フィルタリングを無効化する。 -
OR 1=1:上記と同様に条件を「真」にするために使用される。 -
UNION SELECT:SQLのUNIONを使用して、別のクエリを結合してデータを引き出す。
2. 特殊な構文と関数
-
CAST、CONVERT:データ型を変換する関数で、意図的に異なるデータ型を挿入する。 -
SLEEP():特にMySQLで使用され、サーバーを停止させる時間遅延攻撃。 -
WAITFOR DELAY:SQL Serverで使われる遅延関数。 -
EXEC xp_cmdshell:SQL Serverで、システムコマンドを実行させる意図を含む。
3. スクリプト系の注入
-
<script>alert('XSS');</script>:SQLだけでなく、クロスサイトスクリプティング(XSS)も狙ったコード。 -
'; EXEC('command') --:サブクエリやOSコマンドを実行するSQLを挿入。
4. 特定の条件と論理演算子
-
AND 'a'='a'、OR 'a'='b':条件式を通過させるために使用。 -
' OR '' = ':真または偽の評価を意図的に設定。
5. 特殊文字の例
- シングルクォート
'とダブルクォート" - セミコロン
;とコメントアウト用の--や# - バックスラッシュ
\やスラッシュ/
対策
これらの攻撃を防ぐには、SQL文を組み立てる際にパラメータ化クエリを使用し、入力値のバリデーションやサニタイズ(特定の特殊文字を無効化)を徹底することが重要です。また、必要に応じてデータベースアクセスの権限を制限することで、攻撃の影響を最小限に抑えることも有効です。