Início‎ > ‎

Não armazenar informações confidenciais no código do programa

Embora possa parecer uma solução adequada para proteger os dados secretos usados pelo programa, inseri-los no código irá torná-los acessíveis a qualquer usuário ou máquina virtual Java que execute o sistema. Não há como impedir um usuário ou máquina virtual de inspecionar o código da aplicação e extrair os dados secretos que lá estejam armazenados.

Uma alternativa seria usar técnicas de ofuscamento de código (code obfuscation) para proteger tanto o código da aplicação quanto os dados nele inseridos. Neste caso o segredo passa a ser o algoritmo de ofuscamento usado no sistema. O uso de técnicas de ofuscamento de código, embora não afete negativamente a segurança do sistema, também não garante sua proteção pois não há comprovação que algum algoritmo deste tipo seja impossível de ser quebrado. Portanto, nem mesmo o uso de algoritmos para ofuscar o código não garante a segurança de segredos inseridos no código do programa.

A melhor solução é evitar que a aplicação armazene dados secretos, solicitando-os ao usuário toda vez que forem necessários. Se não houver alternativa, podemos também usar arquivos criptografados, cuja chave de criptografia é inserida pelo usuário quando da inicialização do sistema. O uso de informações que não devem estar acessíveis aos usuários deve ser evitado a todo custo, pois não há como proteger estas informações.

No caso de sistemas web, o código (bytecode) não está disponível para o usuário, já que a aplicação fica instalada em um servidor. Assim, é possível proteger o código do sistema pela configuração adequada do servidor.

Outro problema que advém da inclusão de segredos (chaves, senhas, etc) no código do programa é que o código fonte normalmente fica disponível em um sistema de versionamento (CVS, Subversion, SourceSafe, etc) onde pode ser acessado por muitos programadores. Desta forma, os todos os programadores teriam acesso a uma informação confidencial, mesmo que não necessitem desta informação, aumentando a possibilidade de divulgação indevida (de forma proposital ou não).

Assim, mesmo em aplicações web, é importante que as informações confidenciais necessárias à aplicação estejam em arquivos separados do código da aplicação. Estes arquivos não devem ser armazenados em sistemas de versionamento e devem ser adequadamente protegidos pelos mecanismos de controle de acesso dos servidores de aplicação.

Comments