SQL Enjeksiyonuna Karşı Savunma
Enjeksiyon saldırılarını önleyin
SQL Enjeksiyonuna Karşı Savunma, CoddyKit'te ücretsiz bir Cyber Security Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cyber Security Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cyber Security Academy kursu toplamda 4 dersten oluşur.
SQL Enjeksiyonu Nedir
SQL enjeksiyonu, güvenilmeyen kullanıcı girdisinin doğrudan bir SQL sorgusuna birleştirilmesiyle oluşur. Saldırgan, uygulamanın yalnızca veri beklediği bir alana SQL sözdizimi sızdırarak sorgunun anlamını değiştirir.
Veritabanlarının tamamını sızdırabildiği, oturum açma işlemlerini atlatabildiği veya verileri yok edebildiği için en zararlı web güvenlik açıklarından biri olmaya devam eder.
Güvenlik Açığı İçeren Bir Sorgu
Klasik hata, dizeleri birleştirmektir. Girdi tom olduğunda sorgu sorunsuzdur; ancak özel olarak hazırlanmış bir girdi mantığı yeniden yazar.
- Tek tırnak, dizeyi erkenden kapatır.
- Bundan sonraki her şey çalıştırılabilir SQL'e dönüşür.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'Kimlik Doğrulamasını Atlama
Oturum açma formları başlıca hedeflerdendir. Saldırgan, her zaman doğru olan bir koşul ekleyip geri kalan kısmını yorum satırına dönüştürerek parola olmadan oturum açar.
-- dizisi kalan koşulu yorum satırına dönüştürür; böylece parola denetimi yok sayılır.
-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'Parametreli Sorgular
Birincil savunma parametreli sorgulardır (hazırlanmış ifadeler). SQL yapısı verilerden ayrı gönderilir; böylece girdi her zaman kod olarak değil, bir değer olarak değerlendirilir.
Veritabanı sürücüsü, ? yer tutucularını sağlanan değerlere güvenli biçimde bağlar.
-- Python (sqlite3 / psycopg)
cur.execute(
'SELECT * FROM users WHERE name = ? AND pass = ?',
(username, password)
)Java'da Hazırlanmış İfadeler
Tüm önemli diller parametrelemeyi destekler. Java'da dizeleri Statement ile oluşturmaya çalışmak yerine PreparedStatement kullanın.
Bağlanan parametreler kendi alanlarının dışına çıkamaz; bu nedenle burada enjeksiyon yapısal olarak mümkün değildir.
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();Saklı Yordamlar
Saklı yordamlar, dahili olarak parametreli girdiler kullandıklarında yardımcı olabilir. Ancak dikkatli olun: Bir saklı yordam, dinamik SQL'yi birleştirme yoluyla oluşturuyorsa aynı derecede savunmasızdır.
- Güvenli: yordama geçirilen parametreler.
- Güvensiz: yordamın içindeki birleştirilmiş dizelerin
EXEC()ile çalıştırılması.
Girdi Doğrulama ve İzin Listesi Kullanımı
Doğrulama yararlı bir ikinci katmandır. Engelleme listeleriyle (kötü karakterleri yasaklamaya çalışarak) uğraşmak yerine izin listeleri (yalnızca bilinen ve güvenli kalıpları kabul eder) kullanın.
Örneğin, sayısal bir ID alanı sorguya ulaşmadan önce rakam olmayan her şeyi reddetmelidir.
if not user_id.isdigit():
raise ValueError('invalid id')
# only then use the valueKaçışlama Son Çaredir
Tırnakları elle kaçışlamak kırılgan ve hataya açıktır. Farklı veritabanlarının farklı kaçış kuralları vardır; ayrıca uç durumlar (kodlama hileleri, ikinci aşama enjeksiyon) gözden kaçabilir.
Parametreli sorguları tercih edin. Kaçışlamayı yalnızca bir ORM veya sürücü belirli bir tanımlayıcıyı parametreleyemediğinde kullanın.
Veritabanı Hesaplarında En Az Ayrıcalık
Uygulamanın veritabanı kullanıcısına en az ayrıcalık uygulayarak başarılı bir enjeksiyonun verebileceği zararı sınırlayın.
- Gerekli tablolarda yalnızca
SELECT,INSERT,UPDATEizinlerini verin. - Uygulama için asla süper kullanıcı/
roothesabı kullanmayın. DROP,FILEve yönetici haklarını reddedin.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';Nesne-İlişkisel Eşleyiciler ve Sorgu Oluşturucular
Modern nesne-ilişkisel eşleyiciler (Hibernate, Sequelize, Django ORM, SQLAlchemy) varsayılan olarak parametreleme yapar; bu da enjeksiyon riskinin çoğunu ortadan kaldırır.
Geliştiriciler ham SQL kullanmaya geçtiğinde veya bir sorgu oluşturucuda dize enterpolasyonu kullandığında tehlike geri döner. Ham kipte bile değerleri her zaman bağlanan parametreler olarak geçirin.
Katmanlı Savunma
Tek bir denetim yeterli değildir. Katmanları birleştirin:
- Her yerde parametreli sorgular (birincil savunma).
- Girdi doğrulama / izin listesi kullanımı.
- En az ayrıcalığa sahip veritabanı hesapları.
- Bilinen kalıpları yakalamak için bir web uygulaması güvenlik duvarı (WAF).
- SQL'yi veya yığın izlerini hiçbir zaman sızdırmayan hata işleme.
Hızlı Kontrol
Ana savunmaya ilişkin anlayışınızı sınayın.
Özet
SQL enjeksiyonunun nasıl çalıştığını ve nasıl önleneceğini öğrendiniz:
- SQL enjeksiyonu, güvenilmeyen girdinin sorgulara birleştirilmesiyle ortaya çıkar.
- Parametreli sorgular birincil savunmadır.
- İzin listesi doğrulaması, en az ayrıcalığa sahip veritabanı hesapları ve bir WAF ekleyin.
- Elle kaçışlamadan ve saklı yordamların içindeki dinamik SQL'den kaçının.
Katmanlı savunma, tek bir hatanın güvenlik ihlaline dönüşmesini engeller.
Sıkça Sorulan Sorular
“SQL Enjeksiyonuna Karşı Savunma” dersi ücretsiz mi?
Evet — “SQL Enjeksiyonuna Karşı Savunma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cyber Security Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cyber Security Academy kursu toplamda 4 dersten oluşur.
“SQL Enjeksiyonuna Karşı Savunma” dersinde ne öğreneceğim?
Enjeksiyon saldırılarını önleyin Cyber Security Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cyber Security Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cyber Security Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“SQL Enjeksiyonuna Karşı Savunma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cyber Security Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cyber Security Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- SQL Enjeksiyonuna Karşı Savunma
- Erişim Denetimi ve Şifreleme
- Denetleme ve İzleme
- Yedekleme ve Kurtarma Güvenliği