Manter as senhas fora do código PHP: arquivos .env e as permissões certas

PHP e ProgramaçãoFrameworks, Composer e Git··· 1.349 visualizações· 3 min de leitura

Ponha as senhas e as chaves num arquivo de configuração fora da pasta pública, com permissão de leitura só para a sua conta, e deixe o código ler esse arquivo. Assim uma senha nunca fica num arquivo que o navegador consiga abrir, nunca vai para um repositório, e muda-se num só lugar.

Montar, passo a passo

1 No File Manager, crie uma pasta ao lado de public_html (não dentro), por exemplo /home/SUACONTA/config.
2 Nela crie um arquivo, por exemplo app.env, com uma linha por segredo, no formato NOME=valor.
3 Dê ao arquivo a permissão 600 (Change Permissions, no File Manager): só o dono lê e escreve. O PHP da sua conta corre como a própria conta, por isso consegue lê-lo.
4 No código, leia o arquivo em vez de escrever a senha lá dentro.
5 Confirme que o arquivo não está acessível: tente abri-lo no navegador, a partir do endereço do seu site. Tem de dar 403 ou 404.

O arquivo:

DB_HOST=localhost
DB_NAME=conta_basedados
DB_USER=conta_utilizador
DB_PASS=a-palavra-passe

E a leitura, sem instalar nada:

<?php
$cfg = parse_ini_file('/home/SUACONTA/config/app.env', false, INI_SCANNER_RAW);
$pass = $cfg['DB_PASS'];

Se o projeto usa o Composer, a biblioteca vlucas/phpdotenv lê arquivos .env e é o que as frameworks costumam trazer. Veja o Composer na hospedagem compartilhada.

Se o .env tem de ficar dentro do site

Algumas aplicações esperam o .env na raiz do projeto. Aí, o que protege é a estrutura: a pasta pública deve ser só a public da aplicação, como se descreve em pôr uma aplicação Laravel a rodar. E acrescente o bloco que bloqueia arquivos que começam por ponto, descrito em .htaccess para projetos PHP.

Duas boas práticas a juntar. Use valores diferentes para o site de testes e para o site de verdade, para um engano num não afectar o outro. E dê a cada serviço a sua senha: se uma se perder, só se muda uma.

Um .env em public_html é público. Qualquer pessoa que escreva o endereço baixa as suas senhas, e há robôs que procuram precisamente esses nomes de arquivo. Se isso aconteceu, mude já as senhas (a do banco de dados, no cPanel, e as chaves de qualquer serviço externo), em vez de só apagar o arquivo.
Não envie o .env para um repositório. Ponha-o no .gitignore. Um segredo que passou pelo Git fica no histórico mesmo depois de apagado. Veja o Git no cPanel.
Isto não criptografa nada. Quem tem acesso aos arquivos da conta lê o arquivo, e as nossas cópias diárias contêm-no, tal como as que baixar. Guarde as suas cópias com cuidado. Dê ao banco de dados um usuário só com os privilégios de que a aplicação precisa: criar um usuário e dar-lhe os privilégios certos.

Não sabe se algum arquivo com segredos está acessível pelo navegador? Diga-nos o domínio e verificamos consigo.

Abrir um pedido de suporte

VEJA TAMBÉM

Criar um usuário de banco de dados e dar-lhe os privilégios certos

Onde cada aplicação guarda os dados de conexão ao banco de dados

.htaccess para projetos PHP

Variáveis de ambiente e segredos da sua aplicação

PRODUTO RECOMENDADO

Hospedagem de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.