SQL-injektiotestaaja

Opetustyökalu SQL-injektiohyökkäysten ymmärtämiseen ja niiden ehkäisyyn parametrisoitujen kyselyjen avulla

Kaikki käsittely tapahtuu selaimessasi. Mitään tietoja ei ladata palvelimelle.
Offline Ready

SQL-injektiotestaaja

Opetustyökalu SQL-injektiohyökkäysten ymmärtämiseen ja niiden ehkäisyyn parametrisoitujen kyselyjen avulla

🔒Kaikki käsittely tapahtuu selaimessasi. Mitään tietoja ei ladata palvelimelle.
Kyselypohja
SELECT (Login)
Käyttäjän syöte (simuloitu)
Syötä simuloitu käyttäjäsyöte nähdäksesi, miten se vaikuttaa SQL-kyselyyn...
Yleisiä SQL-injektiohyötykuormia
Haavoittuva kysely (merkkijonojen yhdistäminen)
TURVATON – Älä käytä tuotannossa
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
Turvalliset parametrisoidut vaihtoehdot
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-injektion ehkäisyn parhaat käytännöt
1
Käytä aina parametrisoituja kyselyjä (prepared statements) merkkijonojen yhdistämisen sijaan SQL:ssä.
2
Käytä ORM:ia (Sequelize, SQLAlchemy, Entity Framework), joka luo parametrisoidut kyselyt automaattisesti.
3
Sovella vähimpien oikeuksien periaatetta: tietokantatileillä tulisi olla vain tarvittavat käyttöoikeudet.
4
Käytä sallintalistoja dynaamisille tunnisteille kuten sarake- ja taulunimiä, joita ei voi parametrisoida.
5
Toteuta syötteen validointi syväpuolustuksena, mutta älä koskaan luota siihen ainoana suojana.
6
Ota WAF (Web Application Firewall) -säännöt käyttöön ja seuraa lokeja SQL-injektioyrityksiä varten.