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文を組み立てる際にパラメータ化クエリを使用し、入力値のバリデーションやサニタイズ(特定の特殊文字を無効化)を徹底することが重要です。また、必要に応じてデータベースアクセスの権限を制限することで、攻撃の影響を最小限に抑えることも有効です。