SQL-Injection-Tester

Bildungswerkzeug zum Verständnis von SQL-Injection-Angriffen und zum Erlernen der Prävention mit parametrisierten Abfragen

Die gesamte Verarbeitung findet in Ihrem Browser statt. Es werden keine Daten hochgeladen.
Offline Ready

SQL-Injection-Tester

Bildungswerkzeug zum Verständnis von SQL-Injection-Angriffen und zum Erlernen der Prävention mit parametrisierten Abfragen

🔒Die gesamte Verarbeitung findet in Ihrem Browser statt. Es werden keine Daten hochgeladen.
Abfragevorlage
SELECT (Login)
Benutzereingabe (simuliert)
Simulierte Benutzereingabe eingeben, um die Auswirkung auf die SQL-Abfrage zu sehen...
Häufige SQL-Injection-Payloads
Anfällige Abfrage (String-Verkettung)
UNSICHER - Nicht in Produktion verwenden
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
Sichere parametrisierte Alternativen
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-Injection-Prävention Best Practices
1
Verwenden Sie immer parametrisierte Abfragen (Prepared Statements) anstelle von String-Verkettung für SQL.
2
Verwenden Sie ein ORM (Sequelize, SQLAlchemy, Entity Framework), das automatisch parametrisierte Abfragen generiert.
3
Wenden Sie das Prinzip der minimalen Rechte an: Datenbankkonten sollten nur die Berechtigungen haben, die sie benötigen.
4
Verwenden Sie Allowlists für dynamische Bezeichner wie Spaltennamen und Tabellennamen, die nicht parametrisiert werden können.
5
Implementieren Sie Eingabevalidierung als Defense-in-Depth-Maßnahme, verlassen Sie sich aber niemals darauf als einzigen Schutz.
6
Aktivieren Sie WAF (Web Application Firewall)-Regeln und überwachen Sie Logs auf SQL-Injection-Versuchsmuster.