CA5403: Sertifikayı sabit kodlamayın
Özellik | Değer |
---|---|
Kural Kimliği | CA5403 |
Başlık | Sertifikayı sabit olarak kodlamayın |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
data
Veya rawData
oluşturucusunun or X509CertificateX509Certificate2 parametresi aşağıdakilerden biri tarafından sabit kodlanmıştır:
- Bayt dizisi.
- Char dizisi.
- System.Convert.FromBase64String(String).
- tüm aşırı yüklemeleri System.Text.Encoding.GetBytes.
Kural açıklaması
Sabit kodlanmış bir sertifikanın özel anahtarı kolayca bulunur. Derlenmiş ikili dosyalar olsa bile, kötü amaçlı kullanıcıların sabit kodlanmış bir sertifikanın özel anahtarını ayıklaması kolaydır. Özel anahtarın güvenliği aşıldıktan sonra, saldırgan bu sertifikanın kimliğine bürünebilir ve bu sertifika tarafından korunan tüm kaynaklar veya işlemler saldırgan tarafından kullanılabilir.
İhlalleri düzeltme
- Uygulamanızı Azure Key Vault gibi güvenli bir anahtar yönetim sistemi kullanacak şekilde yeniden tasarlamayı göz önünde bulundurun.
- Kimlik bilgilerini ve sertifikaları kaynak kodunuzdan ayrı güvenli bir konumda tutun.
Uyarıların ne zaman bastırılması gerekiyor?
Sabit kodlanmış veriler sertifikanın özel anahtarını içermiyorsa, bu kuraldan gelen bir uyarıyı engellemek güvenlidir. Örneğin, veriler bir .cer
dosyadan alınmıştı. Genel sertifika bilgilerinin sabit kodlanması, sertifikaların süresi dolduğunda veya iptal edildiklerinde döndürmek için bir zorluk oluşturabilir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5403.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Bayt dizisiyle sabit kodlanmış
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = new byte[] {1, 2, 3};
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Char dizisi tarafından sabit kodlanmış
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;
class ExampleClass
{
public void ExampleMethod(byte[] bytes, string path)
{
char[] chars = new char[] { '1', '2', '3' };
Encoding.ASCII.GetBytes(chars, 0, 3, bytes, 0);
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
FromBase64String tarafından sabit kodlanmış
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = Convert.FromBase64String("AAAAAaazaoensuth");
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
GetBytes tarafından sabit kodlanmış
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = Encoding.ASCII.GetBytes("AAAAAaazaoensuth");
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Çözüm
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}