SQL-injeksjonstester

Pedagogisk verktøy for å forstå SQL-injeksjonsangrep og lære hvordan man forebygger dem med parameteriserte spørringer

All behandling skjer i nettleseren din. Ingen data lastes opp.
Offline Ready

SQL-injeksjonstester

Pedagogisk verktøy for å forstå SQL-injeksjonsangrep og lære hvordan man forebygger dem med parameteriserte spørringer

🔒All behandling skjer i nettleseren din. Ingen data lastes opp.
Spørringsmal
SELECT (Login)
Brukerinndata (simulert)
Skriv inn simulert brukerinndata for å se hvordan det påvirker SQL-spørringen...
Vanlige SQL-injeksjonspayloads
Sårbar spørring (strengsammenslåing)
UTRYGT - Ikke bruk i produksjon
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
Sikre parameteriserte alternativer
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]);
Beste praksis for forebygging av SQL-injeksjon
1
Bruk alltid parameteriserte spørringer (prepared statements) i stedet for strengsammenslåing for SQL.
2
Bruk et ORM (Sequelize, SQLAlchemy, Entity Framework) som genererer parameteriserte spørringer automatisk.
3
Bruk prinsippet om minste privilegium: databasekontoer bør bare ha tillatelsene de trenger.
4
Bruk hvitelister for dynamiske identifikatorer som kolonnenavn og tabellnavn som ikke kan parameteriseres.
5
Implementer inndatavalidering som et dybdeforsvarstiltak, men stol aldri på det som eneste beskyttelse.
6
Aktiver WAF (Web Application Firewall)-regler og overvåk logger for SQL-injeksjonsforsøkmønstre.