SQL enjeksiyon saldırılarında gördüğüm tek şey, parametreli sorguların, özellikle de saklı yordamlardaki sorguların, bu tür saldırılara karşı korunmanın tek yolu olduğunu gösteriyor. Çalışırken (Karanlık Çağlarda) depolanmış prosedürler, daha az bakım yapılabilir oldukları için kötü uygulama olarak görülüyordu; daha az test edilebilir; yüksek derecede birleşmiş; ve bir sistemi tek bir satıcıya kilitledi; ( bu soru başka nedenleri de kapsamaktadır).
Çalışırken, projeler bu tür saldırıların olasılığından neredeyse habersizdi; veritabanını çeşitli türlerin bozulmasına karşı korumak için çeşitli kurallar kabul edilmiştir. Bu kurallar şöyle özetlenebilir:
- Hiçbir istemci / uygulamanın veritabanı tablolarına doğrudan erişimi yoktu.
- Tüm tablolara tüm erişim görünümler aracılığıyla (ve temel tablolarda tüm güncellemeler tetikleyiciler aracılığıyla yapıldı).
- Tüm veri öğelerinin bir etki alanı belirtildi.
- Hiçbir veri öğesinin boş bırakılmasına izin verilmiyordu - bunun, DBA'ların zaman zaman dişlerini taşlamasıyla ilgili sonuçları vardı; ama zorunlu kılındı.
- Roller ve izinler uygun şekilde ayarlandı - örneğin, görünümlere yalnızca verileri değiştirme hakkını veren sınırlı bir rol.
Öyleyse, bu tür (zorunlu olarak bu özel küme olmasa da) gibi bir dizi kural, SQL enjeksiyon saldırılarını önlemede parametrelenmiş sorgulara uygun bir alternatif mi? Değilse, neden olmasın? Bir veritabanı (yalnızca) belirli önlemlerle bu tür saldırılara karşı güvence altına alınabilir mi?
DÜZENLE
Sorunun vurgusu, alınan ilk yanıtlar ışığında biraz değişti. Temel soru değişmedi.
EDIT2
Parametreleştirilmiş sorgulara güvenme yaklaşımı, sistemlere yönelik saldırılara karşı savunmada sadece periferik bir adım gibi görünmektedir. Bana göre, daha temel savunmaların her ikisi de arzu edilir ve özellikle enjeksiyon saldırılarına karşı savunmak için bile gerekli olmayan veya daha az kritik olan bu tür sorgulara güvenebilir.
Benim sorum örtük yaklaşım veritabanı "zırh" dayanıyordu ve bu geçerli bir seçenek olup olmadığı hakkında hiçbir fikrim yoktu. Daha fazla araştırma, bu tür yaklaşımların olduğunu ileri sürdü. Bu tür yaklaşıma bazı işaretler sağlayan aşağıdaki kaynakları buldum:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
Bu kaynaklardan aldığım temel özellikler:
- Kapsamlı bir veri sözlüğü ile birlikte kapsamlı bir veri sözlüğü
- Veri sözlüğünden tetikleyiciler, sorgular ve kısıtlamalar oluşturma
- Kodu En Aza İndir ve Verileri En Üst Düzeye Çıkar
Şimdiye kadar aldığım cevaplar çok faydalı olsa da ve paramaterize sorguları göz ardı etmekten kaynaklanan zorluklara işaret ederken, sonuçta orijinal sorularıma cevap vermiyorlar (şimdi kalın harflerle vurgulanmıştır).