CA2326: Não use valores TypeNameHandling diferentes de Nenhum
Propriedade | valor |
---|---|
ID da regra | CA2326 |
Cargo | Não use valores TypeNameHandling diferentes de Nenhum |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Esta regra é acionada quando uma das seguintes condições é atendida:
- Um valor de enumeração Newtonsoft.Json.TypeNameHandling diferente de
None
, é referenciado. - Um valor inteiro que representa um valor diferente de zero é atribuído a uma variável TypeNameHandling .
Descrição da regra
Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados. Um ataque contra um desserializador inseguro pode, por exemplo, executar comandos no sistema operacional subjacente, se comunicar pela rede ou excluir arquivos.
Esta regra localiza valores Newtonsoft.Json.TypeNameHandling diferentes de None
. Se você quiser desserializar somente quando um Newtonsoft.Json.Serialization.ISerializationBinder for especificado para restringir tipos desserializados, desative essa regra e habilite as regras CA2327, CA2328, CA2329 e CA2330.
Como corrigir violações
- Use o valor de
None
TypeNameHandling, se possível. - Torne os dados serializados invioláveis. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave criptográfica de ser divulgada e projete rotações de chave.
- Restrinja tipos desserializados. Implemente um Newtonsoft.Json.Serialization.ISerializationBinder personalizado. Antes de desserializar com Json.NET, verifique se seu ISerializationBinder personalizado está especificado na propriedade Newtonsoft.Json.JsonSerializerSettings.SerializationBinder. No método Newtonsoft.Json.Serialization.ISerializationBinder.BindToType substituído, se o tipo for inesperado, retorne
null
ou lance uma exceção para interromper a desserialização.- Se você restringir tipos desserializados, convém desabilitar essa regra e habilitar as regras CA2327, CA2328, CA2329 e CA2330. As regras CA2327, CA2328, CA2329 e CA2330 ajudam a garantir que você use um ISerializationBinder ao usar valores TypeNameHandling diferentes de
None
.
- Se você restringir tipos desserializados, convém desabilitar essa regra e habilitar as regras CA2327, CA2328, CA2329 e CA2330. As regras CA2327, CA2328, CA2329 e CA2330 ajudam a garantir que você use um ISerializationBinder ao usar valores TypeNameHandling diferentes de
Quando suprimir avisos
É seguro suprimir um aviso desta regra se:
- Você sabe que a entrada é confiável. Considere que o limite de confiança e os fluxos de dados do seu aplicativo podem mudar ao longo do tempo.
- Você tomou uma das precauções em Como corrigir violações.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.
End Sub
End Class
Solução
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
// The default value of Settings.TypeNameHandling is TypeNameHandling.None.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
End Sub
End Class
Regras conexas
CA2327: Não use JsonSerializerSettings inseguro
CA2328: Verifique se JsonSerializerSettings é seguro
CA2329: Não desserializar com JsonSerializer usando uma configuração insegura
CA2330: Certifique-se de que JsonSerializer tenha uma configuração segura ao desserializar