Güvenli kodlama yönergeleri
Çoğu uygulama kodu, .NET tarafından uygulanan altyapıyı kullanabilir. Bazı durumlarda, güvenlik sistemi genişletilerek veya yeni geçici yöntemler kullanılarak oluşturulan uygulamaya özgü ek güvenlik gerekir.
Kodunuzda .NET tarafından zorlanan izinleri ve diğer zorlamaları kullanarak, kötü amaçlı kodun sahip olmasını istemediğiniz bilgilere erişmesini veya diğer istenmeyen eylemleri gerçekleştirmesini önlemek için engeller getirmelisiniz. Ayrıca, güvenilen kodu kullanarak beklenen tüm senaryolarda güvenlik ve kullanılabilirlik arasında bir denge oluşturmanız gerekir.
Bu genel bakış, kodun güvenlik sistemiyle çalışacak şekilde tasarlanabilir farklı yollarını açıklar.
Kaynak erişiminin güvenliğini sağlama
Kodunuzu tasarlarken ve yazarken, özellikle bilinmeyen kaynak kod kullanırken veya çağırırken bu kodun kaynaklara erişimini korumanız ve sınırlamanız gerekir. Bu nedenle kodunuzun güvenli olduğundan emin olmak için aşağıdaki teknikleri göz önünde bulundurun:
Kod Erişim Güvenliği (CAS) kullanmayın.
Kısmi güvenilen kod kullanmayın.
AllowPartiallyTrustedCaller özniteliğini (APTCA) kullanmayın.
.NET uzaktan iletişimini kullanmayın.
Dağıtılmış Bileşen Nesne Modeli (DCOM) kullanmayın.
İkili biçimlendiricileri kullanmayın.
Kod Erişimi Güvenliği ve Güvenlik Saydam Kodu, kısmen güvenilen koda sahip bir güvenlik sınırı olarak desteklenmez. Bilinmeyen kaynaklardan gelen kodların, alternatif güvenlik önlemleri alınmadan yüklenmesi ve yürütülmesi önerilmez. Alternatif güvenlik önlemleri şunlardır:
Sanallaştırma
AppContainers
İşletim sistemi (OS) kullanıcıları ve izinleri
Hyper-V kapsayıcıları
Güvenliksiz kod
Güvenliksiz kod, güvenlik sistemiyle ilgili açık hiçbir şey yapmaz. Aldığı izinlerle çalışır. Korumalı işlemlerle ilişkili güvenlik özel durumlarını yakalayamayan uygulamalar (dosya kullanımı, ağ vb.) işlenmeyen bir özel duruma neden olsa da, güvenliksiz kod yine de .NET'teki güvenlik teknolojilerinden yararlanır.
Güvenliksiz kitaplık, anlamanız gereken özel özelliklere sahiptir. Kitaplığınızın dosyaları kullanan veya yönetilmeyen kodu çağıran API öğeleri sağladığını varsayalım. Kodunuz ilgili izne sahip değilse, açıklandığı gibi çalışmaz. Ancak, kodun izni olsa bile, kodu çağıran tüm uygulama kodlarının çalışması için aynı izne sahip olması gerekir. Çağıran kodun doğru izni yoksa, kod erişimi güvenlik yığını yürüyüşünün bir sonucu olarak bir SecurityException görünür.
Yeniden kullanılabilir bir bileşen olmayan uygulama kodu
Kodunuz başka kodlar tarafından çağrılmayacak bir uygulamanın parçasıysa güvenlik basittir ve özel kodlama gerekli olmayabilir. Ancak, kötü amaçlı kodun kodunuzu çağırabileceğini unutmayın. Kod erişimi güvenliği kötü amaçlı kodun kaynaklara erişmesini durdurabilir ancak bu tür kodlar, hassas bilgiler içerebilecek alanlarınızın veya özelliklerinizin değerlerini okumaya devam edebilir.
Ayrıca kodunuz İnternet'ten veya diğer güvenilir olmayan kaynaklardan kullanıcı girişini kabul ederse kötü amaçlı girişlere karşı dikkatli olmanız gerekir.
Yönetilen sarmalayıcıdan yerel kod uygulamasına
Genellikle bu senaryoda, yönetilen kod için kullanılabilir hale getirmek istediğiniz yerel kodda bazı yararlı işlevler uygulanır. Yönetilen sarmalayıcılar, platform çağrısı veya COM birlikte çalışma kullanarak kolayca yazılır. Ancak, bunu yaparsanız, sarmalayıcılarınızın çağıranlarının başarılı olabilmesi için yönetilmeyen kod haklarına sahip olması gerekir. Varsayılan ilke altında, bir intranetten veya İnternet'ten indirilen kodun sarmalayıcılarla çalışmayacağından bu durum geçerlidir.
Bu sarmalayıcıları kullanan tüm uygulamalara yönetilmeyen kod hakları vermek yerine, bu hakları yalnızca sarmalayıcı koduna vermek daha iyidir. Temel alınan işlevsellik hiçbir kaynak göstermiyorsa ve uygulama benzer şekilde güvenliyse, sarmalayıcının yalnızca haklarını onaylaması gerekir ve bu da herhangi bir kodun bu kaynak aracılığıyla çağrılabilmesini sağlar. Kaynaklar söz konusu olduğunda, güvenlik kodlaması bir sonraki bölümde açıklanan kitaplık kodu örneğiyle aynı olmalıdır. Sarmalayıcı potansiyel olarak çağıranları bu kaynaklara ifşa ettiğinden, yerel kodun güvenliğinin dikkatli bir şekilde doğrulanması gerekir ve sarmalayıcının sorumluluğundadır.
Korumalı kaynakları kullanıma sunan kitaplık kodu
Aşağıdaki yaklaşım, güvenlik kodlaması için en güçlü ve dolayısıyla tehlikeli (yanlış yapılırsa) yaklaşımıdır: .NET sınıflarının kullandıkları kaynaklar için izinleri zorlaması gibi kitaplığınız, diğer kodun başka kullanılabilir olmayan belirli kaynaklara erişmesi için bir arabirim görevi görür. Bir kaynağı kullanıma sunduğunuz her yerde, kodunuzun önce kaynağa uygun izni istemesi (yani, bir güvenlik denetimi gerçekleştirmesi gerekir) ve ardından genellikle gerçek işlemi gerçekleştirmek için haklarını onaylaması gerekir.