Praticamente todos os aplicativos precisam ter acesso a informações ou segredos confidenciais, como strings de conexão de banco de dados, chaves de API, senhas de conta de serviço para autenticação etc. Normalmente, essas informações são armazenadas em web.config para arquivos app.config.

Se você é uma equipe de desenvolvedores mais deozero, você precisa de um sistema de controle versi n. No entanto, armazenar segredos no sistema de controle de origem, especialmente se eles estão em forma de texto simples é um grande erro. Se for um projeto de código aberto, você está praticamente abrindo os recursos sensíveis a serem consumidos pelo mundo inteiro. Mesmo que seja um repositório privado, alguém com acesso apenas lido ao seu código não deve necessariamente ter permissão para acessar os segredos.

Neste post no blog, descreverei mecanismos que o .NET framework & .NET Core suporta para facilitar que os desenvolvedores usem segredos de aplicativos sem compartilhá-los no controle de origem.

Usando segredos no aplicativo de framework .NET.

O procedimento de alto nível é o seguinte

  • 1- Crie ou atualize seu projeto para .Net framework 4.7.1. Este é um pré-requisito para usar pacotes Nuget descritos na próxima etapa
  • 2- Use o pacote Microsoft.ConfigurationBuilders.UserSecrets Nuget. Isso nos permitirá armazenar alguns valores de configuração de aplicativos fora da pasta de origem do projeto.
  • 3- Configure a seção de construtor de configuração em app.config

O exemplo passo a passo é o seguinte.

Criando o Aplicativo.

  • 1- Crie um novo projeto de aplicativo de console. Eu o chamei de “projeto com segredos”. Você também pode escolher ASP.NET Aplicativo Web. Se você fizer isso, use web.config em vez de app.config para configurações de configuração. um. Certifique-se de que o Quadro escolhido seja 4.7.1 ou posterior. Se você estiver interessado em aplicativos principais .Net, eu vou cobrir isso em uma seção posterior deste artigo.
  • 2- Eu também estou criando um novo Git repo. Isso é apenas para demonstrar quem senhas falsas serão empurradas para o controle de origem
  • 3- Pressione Ok.

image

Adicionando a senha falsa ao aplicativo

  • 1- Adicione o seguinte código na seção de configuração do seu arquivo app.config. Estamos assumindo que o valor da senha não é real
<appSettings>
<add key="password" value="This is a password placeholder"/>
</appSettings>

Acesse a senha de dentro do aplicativo

1- Adicione uma referência de montagem ao Sistema.Configuração

image

2- Adicione a seguinte linha na parte superior do seu programa.cs arquivo

using System.Configuration;

3- Alterar o método principal como seguinte

static void Main(string[] args)
{
    var password = ConfigurationManager.AppSettings["password"];
    Console.WriteLine($"Password is {password}");
}

4- Tente executar o aplicativo pressionando ctrl + f5. Você deve ver saída semelhante a abaixo

image

Armazenamento de senha real fora para pasta de origem

1- Crie um arquivo secrets.xmls em qualquer pasta fora da pasta de origem do aplicativo para armazenar segredos. Por este exemplo, usarei C:\Secrets\secrets.xml

2- O conteúdo dos segredos.xml deve ser obedecer o seguinte

<root>
<secrets ver=1.0">
<secret name=password value=TheRealSecr3t />
</secrets>
</root>

3- No conteúdo do exemplo acima, o valor TheRealSecr3t é considerado a senha real

Configurando o aplicativo para usar a senha real

1- Instale o pacote Microsoft.ConfigurationBuilders.UserSecrets Eu usei a versão 1.0.2

2- O pacote nuget adicionou a seção configBuilders. Modifique-o como seguindo para especificar o caminho real dos arquivos secretos

<configBuilders>
<builders>
<add name="Secrets"
userSecretsFile="c:\\secrets\\secrets.xml" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=1.0.0.0, Culture=neutral" />
</builders>
</configBuilders>

3- Também modifique a seção appSettings para especificar que você deseja que o aplicativo use o construtor de configuração de segredos. Deixe a senha falsa como está

<appSettings configBuilders="Secrets">
<add key="password" value="This is a password placeholder" />
</appSettings>

Testando o aplicativo

Se você executar o aplicativo agora, você deve ver que seu aplicativo está usando a senha real. Viva!!

image

Verificando a fonte no controle de origem

Eu fiz um push do projeto usando comandos de add/commit/push de git usuais para o seguinte repo GitHub. Você pode ver que o arquivo secrets.xml não está incluído nele.

https://github.com/hammadbinarif/project-with-secrets/tree/master/project-with-secrets

Gerenciamento de segredos em aplicativos principais .Net

Os aplicativos principais do .Net permitem que os desenvolvedores armazenem segredos de forma semelhante, mas a experiência do desenvolvedor é muito mais simples, pois o desenvolvedor precisa gerenciar explicitamente o arquivo de segredos fora da pasta de origem. O net framework e o estúdio visual fazem isso automaticamente para o desenvolvedor. Leia o artigo a seguir para obter detalhes

https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.1&tabs=windows

Outras considerações

E se você já fez o check-in das informações confidenciais para o controle de origem?

Mude imediatamente as senhas!! Embora eu mostre como você pode alterar senhas em seu histórico de commit de git mesmo depois que o código foi feito push, ainda é recomendado alterar os valores dos secrets, pois bots online já podem ter indexado as senhas.

Para alterar a senha do histórico do git, você precisa executar o comando do git bash e, em seguida, comprometer a alteração para a origem.

git filter-branch — tree-filter ‘git ls-files -z “*.config” |xargs -0 perl -p -i -e “s#(This is a password placeholder)#sample_password#g”’ — — all

aqui

  • 1) *.config é a busca curinga por nomes de arquivos.
  • 2) Este é um espaço reservado para senha é um texto da sua senha real
  • 3) sample_password é o novo valor (tipicamente alguma senha falsa) que você deseja colocar no arquivo de origem

leia este artigo para mais detalhes

http://palexander.posthaven.com/remove-a-password-from-gits-commit-history-wi

Valores de senha no ambiente de produção

Você não gostaria de copiar seus segredos sobre o ambiente de produção. Se o aplicativo for implantado no azure, a opção mais simples é usar a tela de configurações do Aplicativo para configurar suas configurações específicas do ambiente de produção/slot diretamente no portal azure. Alternativamente, você pode usar o cofre de chaves do azure para configurações de ambiente de dev e prod.

Usando o cofre da chave Azure

O cofre de chaves do Azure é o serviço de nuvem que armazena com segurança os valores secretos e permite o acesso a esses valores, sem qualquer alteração de código explícita para

  • 1) Aplicativo hospedado no azure: este é útil para o aplicativo implantado para acessar valores no tempo de execução
  • 2) Usuários com base em suas credenciais azure: isso é útil para os desenvolvedores acessarem valores específicos do ambiente de desenvolvimento no momento do desenvolvimento

Veja o artigo a seguir para obter detalhes

https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2.1&tabs=aspnetcore2x

Compartilhamento de senhas entre desenvolvedores

Compartilhar senhas em canais não restrições, como chats não criptografados, não é livre de riscos. Usamos o gerenciador de senhas dashlane para compartilhar com segurança as informações confidenciais entre os desenvolvedores. É um serviço pago, mas qualquer mecanismo semelhante de compartilhamento de senhas deve fazer o trabalho.

Feliz desenvolvendo segredos. Sshhhh!!


Autor: Hammad Arif

Artigo Original