CodeBlanks Logo Icon CodeBlanks

Güvenlik meydan okuması

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

query.sql
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

query.sql
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

Soru
SELECT * FROM users WHERE email = ____;
Cevap
SELECT * FROM users WHERE email = $1;

Açıklama: $1 parametre yer tutucusudur; e-posta değeri sorguya ayrı gönderilir.

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