Güvenlik (LINQ to DataSet)
Bu konu başlığında LINQ to DataSet'teki güvenlik sorunları ele alınmaktadır.
Güvenilmeyen Bir Bileşene Sorgu Geçirme
LINQ to DataSet sorgusu bir programın bir noktasında formüle edilebilir ve farklı bir noktada yürütülebilir. Sorgunun formüle edildiği noktada sorgu, çağıran yöntemin ait olduğu sınıfın özel üyeleri veya yerel değişkenleri/bağımsız değişkenleri temsil eden simgeler gibi bu noktada görünür olan herhangi bir öğeye başvurabilir. Yürütme zamanında, çağıran kodun görünürlüğü olmasa bile sorgu, formülasyon sırasında sorgu tarafından başvuruda bulunan üyelere etkili bir şekilde erişebilir. Sorguyu yürüten kodun nelere erişeceğini seçememesi için rastgele bir görünürlük eklenmez. Sorgunun eriştiğine tam olarak erişebilir ve yalnızca sorgunun kendisi aracılığıyla erişebilir.
Bu, bir sorguya başvuruyu başka bir kod parçasına geçirerek sorguyu alan bileşenin, sorgunun başvurduğu tüm genel ve özel üyelere erişimle güvenilir olduğunu gösterir. Genel olarak, sorgu özel tutulması gereken bilgileri kullanıma sunmaması için dikkatlice yapılandırılmadığı sürece LINQ to DataSet sorguları güvenilmeyen bileşenlere geçirilmemelidir.
Dış Giriş
Uygulamalar genellikle dış giriş (bir kullanıcıdan veya başka bir dış aracıdan) alır ve bu girişe göre eylemler gerçekleştirir. LINQ to DataSet söz konusu olduğunda, uygulama bir sorguyu dış girişe göre belirli bir şekilde oluşturabilir veya sorguda dış giriş kullanabilir. LINQ to DataSet sorguları, değişmez değerlerin kabul edildiği her yerde parametreleri kabul eder. Uygulama geliştiricileri, bir dış aracıdaki değişmez değerleri doğrudan sorguya eklemek yerine parametreli sorgular kullanmalıdır.
Doğrudan veya dolaylı olarak kullanıcıdan veya bir dış aracıdan türetilen tüm girişler, yetkisiz eylemler gerçekleştirmek için hedef dilin söz diziminden yararlanan içeriğe sahip olabilir. Bu, hedef dilin Transact-SQL olduğu bir saldırı deseninin adını taşıyan SQL ekleme saldırısı olarak bilinir. Doğrudan sorguya eklenen kullanıcı girişi, veritabanı tablosunu bırakmak, hizmet reddine neden olmak veya gerçekleştirilmekte olan işlemin niteliğini değiştirmek için kullanılır. LINQ to DataSet'te sorgu oluşturma mümkün olsa da, nesne modeli API'si aracılığıyla gerçekleştirilir. LINQ to DataSet sorguları, Transact-SQL'de olduğu gibi dize işleme veya birleştirme kullanılarak oluşmaz ve geleneksel anlamda SQL ekleme saldırılarına açık değildir.