Güvenlik için C# derleyici seçenekleri

Aşağıdaki seçenekler derleyici güvenlik seçeneklerini denetler. Yeni MSBuild söz dizimi Kalın olarak gösterilir. Eski csc.exe söz dizimi içinde code stylegösterilir.

  • PublicSign / -publicsign: Derlemeyi genel olarak imzalayın.
  • DelaySign / -delaysign: Tanımlayıcı ad anahtarının yalnızca ortak bölümünü kullanarak derlemeyi gecikmeli olarak imzalayın.
  • KeyFile / -keyfile : Bir tanımlayıcı ad anahtar dosyası belirtin.
  • KeyContainer / -keycontainer: Tanımlayıcı ad anahtar kapsayıcısı belirtin.
  • HighEntropyVA / -highentropyva: Yüksek entropi Adres Alanı Düzeni RastgeleLeştirmeyi (ASLR) Etkinleştirme

PublicSign

Bu seçenek derleyicinin ortak anahtar uygulamasına neden olur, ancak derlemeyi imzalamaz. PublicSign seçeneği ayrıca derlemede çalışma zamanına dosyanın imzalandığını bildiren bir bit ayarlar.

<PublicSign>true</PublicSign>

PublicSign seçeneği KeyFile veya KeyContainer seçeneğinin kullanılmasını gerektirir. KeyFile ve KeyContainer seçenekleri ortak anahtarı belirtir. PublicSign ve DelaySign seçenekleri birbirini dışlar. Bazen "sahte işaret" veya "OSS işareti" olarak da adlandırılan ortak imzalama, çıkış derlemesinde ortak anahtarı içerir ve "imzalı" bayrağını ayarlar. Genel imzalama aslında derlemeyi özel bir anahtarla imzalamaz. Geliştiriciler açık kaynak projeler için genel işaret kullanır. Kişiler derlemeleri imzalamak için kullanılan özel anahtara erişimi olmadığında yayımlanan "tam olarak imzalanmış" derlemelerle uyumlu derleme derlemeleri. Çok az tüketicinin derlemenin tam olarak imzalanmış olup olmadığını denetlemesi gerektiğinden, genel olarak oluşturulan bu derlemeler, tam olarak imzalanan derlemenin kullanılacağı hemen her senaryoda kullanılabilir.

DelaySign

Bu seçenek, derleyicinin daha sonra dijital imza eklenebilmesi için çıkış dosyasında yer ayırmasına neden olur.

<DelaySign>true</DelaySign>

Tam olarak imzalanan bir derleme istiyorsanız DelaySign kullanın. Yalnızca ortak anahtarı derlemeye yerleştirmek istiyorsanız DelaySign kullanın. KeyFile veya KeyContainer ile kullanılmadığı sürece DelaySign seçeneğinin hiçbir etkisi yoktur. KeyContainer ve PublicSign seçenekleri birbirini dışlar. Tam olarak imzalanan bir derleme istediğinizde, derleyici bildirimi (derleme meta verileri) içeren dosyayı karma olarak oluşturur ve bu karmayı özel anahtarla imzalar. Bu işlem, bildirimi içeren dosyada depolanan bir dijital imza oluşturur. Bir derleme gecikmeli olarak imzalandığında, derleyici imzayı hesaplamaz ve depolamaz. Bunun yerine derleyici, imzanın daha sonra eklenebilmesi için dosyada yer ayırır.

DelaySign'ın kullanılması, test edenin derlemeyi genel önbelleğe yerleştirmesine olanak tanır. Test ettikten sonra, Derleme Bağlayıcı yardımcı programını kullanarak özel anahtarı derlemeye yerleştirerek derlemeyi tamamen imzalayabilirsiniz. Daha fazla bilgi için bkz . Tanımlayıcı Adlandırılmış Derlemeler Oluşturma ve Kullanma ve Derleme İmzalama gecikmesi.

Keyfile

Şifreleme anahtarını içeren dosya adını belirtir.

<KeyFile>filename</KeyFile>

file , tanımlayıcı ad anahtarını içeren dosyanın adıdır. Bu seçenek kullanıldığında, derleyici belirtilen dosyadan ortak anahtarı derleme bildirimine ekler ve son derlemeyi özel anahtarla imzalar. Anahtar dosyası oluşturmak için komut satırına yazın sn -k file . -target:module ile derliyorsanız, anahtar dosyasının adı modülde tutulur ve AddModules ile bir derleme derlerken oluşturulan derlemeye eklenir. Şifreleme bilgilerinizi KeyContainer ile derleyiciye de geçirebilirsiniz. Kısmen imzalı bir derleme istiyorsanız DelaySign kullanın. Aynı derlemede hem KeyFile hem de KeyContainer belirtilirse, derleyici önce anahtar kapsayıcısını dener. Bu başarılı olursa, derleme anahtar kapsayıcısında bilgilerle imzalanır. Derleyici anahtar kapsayıcısını bulamazsa KeyFile ile belirtilen dosyayı dener. Bu başarılı olursa, derleme anahtar dosyasındaki bilgilerle imzalanır ve anahtar bilgileri anahtar kapsayıcısında yüklenir. Sonraki derlemede anahtar kapsayıcısı geçerli olacaktır. Anahtar dosyası yalnızca ortak anahtarı içerebilir. Daha fazla bilgi için bkz . Tanımlayıcı Adlandırılmış Derlemeler Oluşturma ve Kullanma ve Derleme İmzalama gecikmesi.

Keycontainer

Şifreleme anahtarı kapsayıcısının adını belirtir.

<KeyContainer>container</KeyContainer>

container , tanımlayıcı ad anahtar kapsayıcısının adıdır. KeyContainer seçeneği kullanıldığında, derleyici paylaşılabilir bir bileşen oluşturur. Derleyici, belirtilen kapsayıcıdan derleme bildirimine bir ortak anahtar ekler ve son derlemeyi özel anahtarla imzalar. Anahtar dosyası oluşturmak için komut satırına yazın sn -k file . sn -i anahtar çiftini bir kapsayıcıya yükler. Derleyici CoreCLR üzerinde çalıştığında bu seçenek desteklenmez. CoreCLR'de derleme oluştururken bir derlemeyi imzalamak için KeyFile seçeneğini kullanın. TargetType ile derliyorsanız, anahtar dosyasının adı modülde tutulur ve bu modülü AddModules ile bir derlemede derlediğinizde derlemeye eklenir. Bu seçeneği herhangi bir ortak ara dil (System.Reflection.AssemblyKeyNameAttributeCIL) modülü için kaynak kodunda özel öznitelik () olarak da belirtebilirsiniz. Şifreleme bilgilerinizi KeyFile ile derleyiciye de geçirebilirsiniz. Ortak anahtarı derleme bildirimine eklemek ancak test edilene kadar derlemeyi imzalamak için DelaySign kullanın. Daha fazla bilgi için bkz . Tanımlayıcı Adlandırılmış Derlemeler Oluşturma ve Kullanma ve Derleme İmzalama gecikmesi.

HighEntropyVA

HighEntropyVA derleyici seçeneği, Windows çekirdeğine belirli bir yürütülebilir dosyanın yüksek entropi Adres Alanı Düzeni Rastgele Seçimini (ASLR) destekleyip desteklemediğini bildirir.

<HighEntropyVA>true</HighEntropyVA>

Bu seçenek, PlatformTarget derleyici seçeneği tarafından işaretlenen 64 bit yürütülebilir veya yürütülebilir dosyanın yüksek entropi sanal adres alanını desteklediğini belirtir. Seçeneği tüm .NET Standard ve .NET Core sürümleri ve .NET Framework 4.5 ile başlayan .NET Framework sürümleri için varsayılan olarak etkindir.

HighEntropyVA seçeneği, ASLR'nin bir parçası olarak bir işlemin adres alanı düzenini rastgele belirlerken Windows çekirdeğinin uyumlu sürümlerinin daha yüksek entropi derecelerini kullanmasını sağlar. Daha yüksek entropi derecelerinin kullanılması, yığınlar ve yığınlar gibi bellek bölgelerine daha fazla sayıda adres ayrılabileceği anlamına gelir. Sonuç olarak, belirli bir bellek bölgesinin konumunu tahmin etmek daha zordur. HighEntropyVA derleyici seçeneği hedef yürütülebilir dosyayı gerektirir ve bağımlı olduğu tüm modüller 64 bit işlem olarak çalıştırıldığında 4 gigabayttan (GB) büyük işaretçi değerlerini işleyebilir.