Gördüğüm kadarıyla, SQL enjeksiyon saldırıları önlenebilir:
- Dikkatlice tarama, filtreleme, kodlama girişi (SQL'e yerleştirmeden önce)
- Kullanılması hazırlanmış tablolar / parametreli sorgular
Sanırım her biri için artılar ve eksiler var, ama neden 2. attı ve enjeksiyon saldırılarını engellemenin fiili bir yolu olduğu düşünüldü? Sadece daha mı güvenli ve hataya daha az yatkın mı yoksa başka faktörler var mıydı?
Anladığım kadarıyla # 1 doğru kullanılırsa ve tüm uyarılar dikkate alınırsa, # 2 kadar etkili olabilir.
Dezenfektan, Filtreleme ve Kodlama
Sanitasyon , filtreleme ve kodlamanın ne anlama geldiği arasında bazı karışıklıklar vardı . Amaçlarım için yukarıdakilerin hepsinin seçenek 1 için dikkate alınabileceğini söyleyeceğim. Bu durumda, temizlik ve filtrelemenin girdi verilerini değiştirme veya atma potansiyeline sahip olduğunu, kodlamanın olduğu gibi koruduğunu ancak kodlamadığını anladım. Enjeksiyon saldırılarını önlemek için Kaçan verilerin onu kodlamanın bir yolu olarak görülebileceğine inanıyorum.
Parametreli Sorgular ve Kodlama Kütüphanesi
Kavramları cevaplar vardır parameterized queries
ve encoding libraries
o birbirinin davranılır. Yanılıyorsam düzelt beni, ama farklı oldukları izlenimindeyim.
Anladığım kadarıyla, encoding libraries
her zaman ne kadar iyi olursa olsun, her zaman SQL "Program" ı değiştirme potansiyeline sahipler , çünkü RDBMS'ye gönderilmeden önce SQL'de değişiklikler yapıyorlar.
Parameterized queries
Öte yandan, SQL programını, sorguyu en iyi duruma getiren, sorgu yürütme planını tanımlayan, kullanılacak dizinleri vb. seçen RDBMS'ye gönderin ve ardından verileri RDBMS içindeki son adım olarak takın kendisi.
Kodlama Kütüphanesi
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
Parametreli Sorgu
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
Tarihsel Önemi
Bazı cevaplar, tarihsel olarak, parametreli hale getirilmiş sorguların (PQ) performans nedenleriyle ve kodlama sorunlarını hedef alan enjeksiyon saldırılarının popüler hale gelmesinden önce yaratıldığından bahseder. Bir noktada PQ'nun enjeksiyon saldırılarına karşı da oldukça etkili olduğu anlaşıldı. Sorumumun ruhuna uymak için, PQ neden tercih edilen yöntem olarak kaldı ve SQL enjeksiyon saldırılarını önleme konusunda neden diğer pek çok yöntemin üstünde gelişti?