SQLインジェクションテスター

SQLインジェクション攻撃を理解し、パラメータ化クエリで防止する方法を学ぶための教育ツール

すべての処理はブラウザ内で行われます。データはアップロードされません。
Offline Ready

SQLインジェクションテスター

SQLインジェクション攻撃を理解し、パラメータ化クエリで防止する方法を学ぶための教育ツール

🔒すべての処理はブラウザ内で行われます。データはアップロードされません。
クエリテンプレート
SELECT (Login)
ユーザー入力(シミュレーション)
シミュレーションされたユーザー入力を入力してSQLクエリへの影響を確認...
一般的なSQLインジェクションペイロード
脆弱なクエリ(文字列連結)
危険 - 本番環境で使用しないでください
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
安全なパラメータ化代替クエリ
Node.js (mysql2)
const [rows] = await connection.execute(
  'SELECT * FROM users WHERE username = ? AND password = ?',
  [username, password]
);
Python (psycopg2)
cursor.execute(
    "SELECT * FROM users WHERE username = %s AND password = %s",
    (username, password)
)
Java (PreparedStatement)
PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM users WHERE username = ? AND password = ?"
);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
C# (SqlParameter)
using var cmd = new SqlCommand(
    "SELECT * FROM users WHERE username = @user AND password = @pass",
    connection
);
cmd.Parameters.AddWithValue("@user", username);
cmd.Parameters.AddWithValue("@pass", password);
PHP (PDO)
$stmt = $pdo->prepare(
    'SELECT * FROM users WHERE username = :user AND password = :pass'
);
$stmt->execute(['user' => $username, 'pass' => $password]);
SQLインジェクション防止のベストプラクティス
1
SQLには文字列連結ではなく、常にパラメータ化クエリ(プリペアドステートメント)を使用してください。
2
パラメータ化クエリを自動生成するORM(Sequelize、SQLAlchemy、Entity Framework)を使用してください。
3
最小権限の原則を適用してください:データベースアカウントには必要な権限のみ付与します。
4
パラメータ化できないカラム名やテーブル名などの動的識別子にはホワイトリストを使用してください。
5
多層防御策として入力バリデーションを実装しますが、唯一の防御策として依存しないでください。
6
WAF(Webアプリケーションファイアウォール)ルールを有効にし、SQLインジェクション試行パターンのログを監視してください。