SQL injection
- SQL kursu
- Uzman
- Ders 36/45
- 5 dk
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
-- injection koruması
PREPARE check_user(text)Örnek çözüm
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
PREPARE check_user(text) AS
SELECT * FROM users WHERE email = ____;
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 |