CA5405: Nepřeskakujte vždy ověření tokenu v delegátech
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5405 |
Název | Nepřeskakujte vždy ověření tokenu u delegátů. |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Zpětné volání přiřazené AudienceValidator nebo LifetimeValidator vždy vrátí true
.
Popis pravidla
Nastavením důležitých TokenValidationParameter
delegátů ověřování tak, aby se vždy vracely true
, jsou zakázána důležitá bezpečnostní opatření ověřování. Zakázání ochranných opatření může vést k nesprávnému ověření tokenů od jakéhokoli vystavitele nebo tokenů s vypršenou platností.
Další informace o osvědčených postupech pro ověřování tokenů najdete na wikiwebu knihovny.
Jak opravit porušení
- Vylepšete logiku delegáta, takže ne všechny cesty kódu se vrátí
true
, což účinně zakáže tento typ ověřování. - Vyvolání
SecurityTokenInvalidAudienceException
neboSecurityTokenInvalidLifetimeException
v případech selhání, pokud chcete neúspěšné ověření a mají jiné případy průchod vrácenímtrue
.
Kdy potlačit upozornění
V některých konkrétních případech, kdy používáte delegáta pro další protokolování a jedná se o typy tokenů, u kterých není potřeba konkrétní typ ověření, může být vhodné toto upozornění potlačit. Než toto ověření zakážete, ujistěte se, že jste plně promysleli důsledky zabezpečení. Informace o kompromisech najdete na wikiwebu knihovny ověřování tokenů.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Porušení
using System;
using Microsoft.IdentityModel.Tokens;
class TestClass
{
public void TestMethod()
{
TokenValidationParameters parameters = new TokenValidationParameters();
parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
}
}
Řešení
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;
};
}
}