Consulta URI e redação de fragmentos em eventos HttpClient EventSource

No .NET 9, o comportamento predefinido dos eventos EventSource emitidos por HttpClient e SocketsHttpHandler (nome de EventSource: System.Net.Http) foi modificado para remover as partes de consulta, informação do utilizador e fragmento do URI. Essa alteração aumenta a privacidade, impedindo o registro de informações potencialmente confidenciais contidas em cadeias de caracteres de consulta, mantendo os custos de desempenho da redação mínimos. Se necessário, você pode substituir esse comportamento.

Versão introduzida

.NET 9 Preview 7

Comportamento anterior

Anteriormente, os eventos emitidos por HttpClient e SocketsHttpHandler incluíam informações da cadeia de consulta, o que podia expor inadvertidamente informações sensíveis.

Novo comportamento

Com a alteração em dotnet/runtime#104741, o componente de consulta é substituído pelo caráter *, e os componentes de informações do utilizador e de fragmento são removidos, por defeito, nos eventos HttpClient e SocketsHttpHandler. Essa alteração afeta eventos e parâmetros específicos, como pathAndQuery no RequestStart e redirectUri no Redirect.

Tipo de alteração interruptiva

Esta mudança é uma mudança comportamental.

Razão para a alteração

A principal razão para esta alteração foi melhorar a privacidade, reduzindo o risco de informações confidenciais serem registadas inadvertidamente. As cadeias de caracteres de consulta geralmente contêm dados confidenciais, e editá-las de logs por padrão ajuda a proteger essas informações. Para manter a implementação simples e eficiente, a informação do utilizador e as partes fragmentadas também são removidas.

Se precisar de informação da cadeia de consulta ao consumir eventos HttpClient ou SocketsHttpHandler e tiver a certeza de que é seguro fazê-lo, pode desativar globalmente a redação de URI definindo um comutador AppContext de uma de três formas. O switch ignora qualquer redação, por isso os URIs são reportados as-is, incluindo a consulta, informações do utilizador e partes fragmentadas.

  • No arquivo do projeto.

    <ItemGroup>
      <RuntimeHostConfigurationOption Include="System.Net.Http.DisableUriRedaction" Value="true" />
    </ItemGroup>
    
  • No ficheiro runtimeconfig.json.

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Net.Http.DisableUriRedaction": true
            }
        }
    }
    
  • Através de uma variável de ambiente.

    Defina DOTNET_SYSTEM_NET_HTTP_DISABLEURIREDACTION como true ou 1.

Caso contrário, nenhuma ação será necessária e o comportamento padrão ajudará a melhorar os aspetos de privacidade do seu aplicativo.

Nota

Esta opção também omite a redação do URI nos registos predefinidos IHttpClientFactory. Para obter mais informações, consulte Ocultação da cadeia de consulta do URI nos registos do IHttpClientFactory.

APIs afetadas