Ainda não estou acostumado com o modo como o Git funciona (e me pergunto se alguém além de Linus está;)).
Se você usar o Heroku para hospedar seu aplicativo, precisará verificar seu código em um repositório Git. Se você trabalha em um projeto de código aberto, é mais provável que compartilhe esse repositório no Github ou em outros hosts do Git.
Algumas coisas não devem ser verificadas no repositório público; senhas de banco de dados, chaves de API, certificados, etc ... Mas essas coisas ainda precisam fazer parte do repositório Git, pois você o usa para enviar seu código ao Heroku.
Como trabalhar com este caso de uso?
Nota: Eu sei que o Heroku ou PHPFog pode usar variáveis de servidor para contornar esse problema. Minha pergunta é mais sobre como "ocultar" partes do código.
Respostas:
O método preferido de manter as senhas / chaves da API secretas no heroku é definir valores de configuração por meio do aplicativo de linha de comando heroku. O exemplo a seguir, retirado de um artigo do heroku dev center
(O exemplo abaixo e toda a minha resposta estão relacionadas a aplicativos Rails)
Em seguida, faça referência a esses valores de configuração no seu código usando a variável ENV []
Dessa forma, suas senhas confidenciais não são armazenadas no repositório git. (Nota: ao executar o aplicativo localmente, defina esses valores no seu
.bashrc
arquivoAlém disso, não tenho certeza de que tipo de aplicativo você está executando, mas no Rails, o heroku não usa seu arquivo database.yml, simplesmente define o nome de usuário / senha do banco de dados de acordo com as configurações do aplicativo. Assim, você pode evitar salvar essas credenciais no git
Além disso, se você estiver executando seu próprio aplicativo e quiser que ele permaneça privado, uma ótima alternativa ao github é o bitbucket, que oferece repositórios particulares gratuitos.
fonte
Várias idéias ... A criptografia de chave pública é a resposta mais flexível.
Ofuscação (apenas para código)
Para as partes do código que você deseja ocultar, você pode colocá-las em um projeto diferente, compilá-las e fazer check-in apenas do código compilado, não da fonte? Isso não é criptografia e não é adequado para criptografar senhas ou chaves. As pessoas ainda podem fazer engenharia reversa do seu código compilado, mas não obtêm a fonte.
Repositório GIT privado
Ele precisa ser um repositório público git?
Armazenamento do servidor
Você pode armazenar essas informações em um arquivo protegido no diretório inicial da conta de usuário sob a qual o aplicativo é executado? Eu copiaria a maneira como o ssh faz isso com ~ / .ssh / id_rsa e um chmod de 600. Falhando nisso, uma variável de ambiente poderia ser usada. Você precisa de algum lugar no servidor para armazenar algum tipo de chave ou não há como proteger alguma coisa.
Criptografia simétrica (apenas para você)
Se você for o único desenvolvedor, poderá colocar uma chave no servidor e ter a mesma chave em sua máquina e usar um esquema de criptografia simétrica para proteger alguns dados, como senha ou certificado. Compartilhar uma chave simétrica com os amigos fica confuso.
Criptografia assimétrica (para vários desenvolvedores)
Se outros desenvolvedores precisarem verificar coisas secretas em um repositório público git, foi criada uma criptografia de chave pública / chave privada (assimétrica) para esse tipo de coisa. Instale uma chave privada no seu servidor (não a verifique no controle de origem!) E gere uma chave pública a partir dela. Criptografe seus dados secretos usando a chave pública do servidor. Somente o servidor pode descriptografar esses dados usando sua chave privada. Você pode até verificar a chave pública no controle de origem para que outras pessoas possam criptografar dados usando a mesma chave pública e apenas o servidor possa descriptografá-los.
Ferramenta
O Openssl é provavelmente a única ferramenta de criptografia que você precisará. Não escreva seu próprio algoritmo de criptografia ou sua própria implementação de um algoritmo publicado.
Pensamentos finais
Se o "servidor" for um servidor Web que use https, você já deve ter algum tipo de armazenamento de chaves seguro no servidor para armazenar a chave privada. esta. Talvez eles tenham algumas dicas de como os outros resolvem o desafio que você está enfrentando?
fonte
Se você deseja executar seu código no Heroku, é necessário fornecer a ele - não é possível mantê-lo em "segredo" do seu provedor de hospedagem.
No que diz respeito aos repositórios públicos do git, se o seu projeto é de código aberto, mas você não deseja compartilhar detalhes de hospedagem, seria necessário manter uma bifurcação privada do seu projeto para fins de implantação.
fonte
Você não deve ocultar partes do código. A segurança do seu sistema não deve depender do sigilo do código; isso é conhecido como "segurança através da obscuridade", que é desaprovada pelos especialistas em segurança porque funciona muito mal.
Em vez disso, senhas, chaves criptográficas etc. devem ser mantidas separadas do código. Armazene-os em um arquivo de configuração separado ou em um valor de configuração que seja lido pelo código. Você não precisa armazená-los no git.
Importante: nunca codifique chaves criptográficas, senhas ou outros segredos no seu código-fonte! Essa é uma prática muito ruim.
Veja também:
Como os projetos de código aberto lidam com artefatos seguros?
Senha no arquivo .php
Padrões para criptografar senhas em arquivos de configuração?
Código aberto e como funciona para projetos seguros?
Como proteger as informações da conta ftp no código fonte de um programa
É uma maneira segura de declarar parâmetros de banco de dados no htaccess, e não em um arquivo PHP?
Plug: IT Security.SE é um ótimo lugar para fazer perguntas sobre segurança!
fonte