Parameterized query
- Node.js kursu
- İleri seviye
- Ders 33/83
- 5 dk
Parameterized query ile SQL injection koruması öğrenirsin.
Parameterized query
Parametreli sorgu, SQL dizgisi ile kullanıcı verisini ayıran tekniktir. SQL dizgisinde $1, $2 gibi yer tutucular kullanılır; gerçek değerler ayrı bir dizi olarak verilir.
Örnek: pool.query("SELECT * FROM users WHERE email = $1", [email]). Bu, SQL enjeksiyonunu önler; çünkü kullanıcı verisi asla SQL dizgisiyle birleşmez. PostgreSQL, yer tutucuları güvenli şekilde değiştirir. Parametreli sorgu, veritabanı güvenliğinin temel ilkesidir.
Neden parametreli?
Parametresiz sorgu tehlikelidir. pool.query("SELECT * FROM users WHERE name = '" + ad + "'") deseninde, kötü niyetli bir ad değeri SQL'i değiştirebilir. Örneğin ad = "' OR '1'='1" tüm kullanıcıları döndürür.
Parametreli sorguda bu mümkün değildir. $1 yer tutucusu yalnızca bir değeri temsil eder; SQL yapısını değiştiremez. Bu yüzden her zaman parametreli sorgu kullan; kullanıcıdan gelen veriyi asla doğrudan SQL'e ekme.
Uygulama Sorgu dizgisini yaz
Bir SQL dizgisi tanımla: SELECT * FROM users WHERE id = $1. Bu dizgiyi text değişkenine ata. text'i console.log ile yaz.
Başlangıç kodu
// sorgu dizgisini tanımla
// dizgiyi yazÖrnek çözüm
const text = "SELECT * FROM users WHERE id = $1";
console.log(text);Beklenen çıktı
SELECT * FROM users WHERE id = $1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
$1 |
Yer tutucu |
values dizisi |
Parametre değerleri |
pool.query |
Sorgu çalıştırır |
SQL enjeksiyonu |
Saldırı türü |
2 Yer tutucuyu tamamla
const text = "SELECT * FROM users WHERE id = ____";
const text = "SELECT * FROM users WHERE id = $1";
Açıklama: PostgreSQL'de $1 bir parametre yer tutucusudur.
3 Parametreli sorgu neyi önler?
- SQL enjeksiyonunu Doğru cevap
- Bellek sızıntısını
- CSS hatasını
- Ağ yavaşlamasını
Açıklama: Parametreli sorgu SQL enjeksiyonunu önler.