Güvenlik meydan okuması
- SQL kursu
- Uzman
- Ders 44/45
- 6 dk
Parametreli sorgu ve GRANT ile güvenli yapı
Güvenlik challenge
Üçüncü challenge: users tablosuna SQL injection'a karşı PREPARE find_user(text) hazırla. Parametreli sorgu, e-posta değerini güvenle taşır.
PREPARE find_user(text) AS
SELECT * FROM users WHERE email = $1;PREPARE injection'ı engeller.
users kaynağından tüm sütunlar seçilir. WHERE email = $1 koşulunu sağlamayan satırlar elenir.
Uygulama Güvenlik challenge
Önceki çözüme PREPARE find_user(text) AS SELECT * FROM users WHERE email = $1 ekle.
Başlangıç kodu
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE,
password_hash TEXT
);
-- optimizasyon
EXPLAIN SELECT * FROM users WHERE email = 'a@b.com';
-- güvenlik
PREPAREÖrnek çözüm
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE,
password_hash TEXT
);
-- optimizasyon
EXPLAIN SELECT * FROM users WHERE email = 'a@b.com';
-- güvenlik
PREPARE find_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 Güvenlik challenge: kavramları eşleştir
| Kavram | Anlamı |
|---|---|
PREPARE |
hazırla |
$1 |
parametre |
injection |
enjeksiyon |
value |
değer |
2 PREPARE neyi engeller?
- İndeks eksikliğini
- SQL injection Doğru cevap
- Yedek almayı
- Tetikleyiciyi
Açıklama: PREPARE SQL injection'ı engeller.
3 Parametre yer tutucusu
SELECT * FROM users WHERE email = ____;
SELECT * FROM users WHERE email = $1;
Açıklama: $1 parametre yer tutucusudur; e-posta değeri sorguya ayrı gönderilir.