Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA5399 |
| Judul | Aktifkan pemeriksaan daftar pencabutan sertifikat HttpClient |
| Golongan | Keamanan |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | No |
Penyebab
Menggunakan System.Net.Http.HttpClient saat menyediakan handler khusus platform (System.Net.Http.WinHttpHandler atau System.Net.Http.HttpClientHandler) yang propertinya CheckCertificateRevocationList tidak diatur ke true akan memungkinkan sertifikat yang dicabut diterima oleh HttpClient sebagai valid.
Aturan ini mirip dengan CA5400, tetapi analisis dapat menentukan bahwa CheckCertificateRevocationList properti sudah pasti false atau tidak diatur.
Deskripsi aturan
Sertifikat yang dicabut tidak dipercaya lagi. Sertifikat yang dicabut dapat digunakan oleh penyerang yang mengirimkan beberapa data berbahaya atau mencuri data sensitif dalam komunikasi HTTPS.
Cara memperbaiki pelanggaran
Atur System.Net.Http.HttpClientHandler.CheckCertificateRevocationList properti ke true secara eksplisit.
CheckCertificateRevocationList Jika properti tidak tersedia, Anda perlu meningkatkan kerangka kerja target Anda.
Kapan harus menekan peringatan
Jangan menekan aturan ini.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku, atau untuk semua aturan dalam kategori ini (Security) yang berlaku untuk aturan tersebut. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.
Mengecualikan simbol tertentu
Anda dapat mengecualikan simbol tertentu, seperti jenis dan metode, dari analisis dengan mengatur opsi excluded_symbol_names. Misalnya, untuk menentukan bahwa aturan tidak boleh berjalan pada kode apa pun dalam jenis bernama MyType, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Nota
Ganti bagian XXXXCAXXXX dengan ID aturan yang berlaku.
Format nama simbol yang diizinkan pada nilai opsi (dipisahkan oleh |):
- Nama simbol saja (menyertakan semua simbol dengan nama, terlepas dari jenis atau namespace yang memuatnya).
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi simbol. Setiap nama simbol memerlukan awalan jenis simbol, seperti
M:untuk metode,T:untuk jenis, danN:untuk namespace. -
.ctoruntuk konstruktor dan.cctoruntuk konstruktor statik.
Contoh:
| Nilai Opsi | Ringkasan |
|---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Mencocokkan semua simbol bernama MyType. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Mencocokkan semua simbol bernama MyType1 atau MyType2. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Mencocokkan MyMethod metode tertentu dengan tanda tangan yang sepenuhnya memenuhi syarat yang ditentukan. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Mencocokkan MyMethod1 dan MyMethod2 metode tertentu dengan masing-masing tanda tangan yang sepenuhnya memenuhi syarat. |
Mengecualikan jenis tertentu dan jenis turunannya
Anda dapat mengecualikan jenis tertentu dan jenis turunannya dari analisis dengan mengatur opsi excluded_type_names_with_derived_types. Misalnya, untuk menentukan bahwa aturan tidak boleh dijalankan pada metode apa pun dalam jenis bernama MyType dan jenis turunannya, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Nota
Ganti bagian XXXXCAXXXX dengan ID aturan yang berlaku.
Format nama simbol yang diizinkan pada nilai opsi (dipisahkan oleh |):
- Nama jenis saja (mencakup semua jenis dengan nama, terlepas dari jenis atau namespace yang memuatnya).
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi simbol, dengan awalan
T:opsional.
Contoh:
| Nilai opsi | Ringkasan |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Mencocokkan semua jenis bernama MyType dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Mencocokkan semua jenis bernama MyType1 atau MyType2 dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Mencocokkan MyType jenis tertentu dengan nama yang sepenuhnya memenuhi syarat tertentu dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Mencocokkan MyType1 dan MyType2 jenis tertentu dengan masing-masing nama yang sepenuhnya memenuhi syarat, dan semua jenis turunannya. |
Contoh kode semu
using System.Net.Http;
class ExampleClass
{
void ExampleMethod()
{
WinHttpHandler winHttpHandler = new WinHttpHandler();
winHttpHandler.CheckCertificateRevocationList = false;
HttpClient httpClient = new HttpClient(winHttpHandler);
}
}
Solusi
using System.Net.Http;
class ExampleClass
{
void ExampleMethod()
{
WinHttpHandler winHttpHandler = new WinHttpHandler();
winHttpHandler.CheckCertificateRevocationList = true;
HttpClient httpClient = new HttpClient(winHttpHandler);
}
}