CA5405: Jangan selalu melewatkan validasi token dalam delegasi

Properti Nilai
ID Aturan CA5405
Judul Jangan selalu melewati validasi token di delegasi
Kategori Keamanan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Panggilan balik yang ditetapkan ke AudienceValidator atau LifetimeValidator selalu mengembalikan true.

Deskripsi aturan

Dengan mengatur delegasi validasi penting TokenValidationParameter untuk selalu mengembalikan true, perlindungan autentikasi penting dinonaktifkan. Menonaktifkan perlindungan dapat menyebabkan validasi token yang salah dari penerbit atau token yang kedaluwarsa.

Untuk informasi selengkapnya tentang praktik terbaik untuk validasi token, lihat pustaka wiki.

Cara memperbaiki pelanggaran

  • Tingkatkan logika delegasi sehingga tidak semua jalur kode mengembalikan true, yang secara efektif menonaktifkan jenis validasi tersebut.
  • Melempar SecurityTokenInvalidAudienceException atau SecurityTokenInvalidLifetimeException pada kasus kegagalan ketika Anda ingin gagal validasi agar kasus lain berhasil dengan mengembalikan true.

Kapan harus menekan peringatan

Dalam beberapa kasus tertentu di mana Anda menggunakan delegasi untuk pengelogan tambahan dan itu untuk jenis token di mana jenis validasi tertentu tidak diperlukan, mungkin masuk akal untuk menekan peringatan ini. Sebelum Anda menonaktifkan validasi ini, pastikan Anda telah sepenuhnya memikirkan implikasi keamanan. Untuk informasi tentang kompromi, lihat wiki pustaka untuk validasi token.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh kode semu

Pelanggaran

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
    }
}

Solusi

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) =>
        {
            // Implement your own custom audience validation
            if (PerformCustomAudienceValidation(audiences, token))
                return true;
            else
                return false;
        };
    }
}