CodeBlanks Logo Icon CodeBlanks

SQL injection

Enjeksiyon saldırısını ve korunmayı öğrenirsin.

SQL injection

SQL injection, saldırganın kullanıcı girdisini SQL'e ekleyerek sorguyu değiştirmesidir. Dize birleştirme (string concatenation) en büyük risktir; PREPARE ile parametreli sorgu bunu engeller.

-- YANLIŞ: '...' || user_input
-- DOĞRU: PREPARE find(text) AS
--   SELECT * FROM users WHERE email = $1;

Bu sorgu injection dize birleştirmeden doğar.

SQL injection — ayrıntı

Saldırgan ' OR '1'='1 yazarak tüm satırları çeker. Parametreli sorgu, girdiyi değer olarak ele alır; bu yüzden SQL parçası gibi davranamaz.

Uygulama SQL injection

check_user(text) prepared sorgusunu oluştur: users tablosundan email = $1 satırını seç.

Başlangıç kodu

query.sql
-- injection koruması
PREPARE check_user(text)

Örnek çözüm

query.sql
PREPARE check_user(text) AS SELECT * FROM users WHERE email = $1;

Beklenen çıktı

PREPARE

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SQL injection neyi sömürür?

  • Tetikleyiciyi
  • Dize birleştirmeyi Doğru cevap
  • İndeksi
  • Görünümü

Açıklama: SQL injection dize birleştirmeyi sömürür.

2 Hazırlanmış sorgu

Soru
PREPARE check_user(text) AS
SELECT * FROM users WHERE email = ____;
Cevap
PREPARE check_user(text) AS
SELECT * FROM users WHERE email = $1;

Açıklama: $1 parametre yer tutucusudur; kullanıcı girdisi sorguya metin olarak birleştirilmediği için SQL injection önlenir.

3 SQL injection: kavramları eşleştir

Kavram Anlamı
injection enjeksiyon
concat birleştirme
PREPARE hazırla
parameter parametre

Uzman bölümündeki tüm dersler