Desenvolvimento Seguro em Java

Olá pessoal, demorou mas chegou!


Existem vários pontos a se atentar quando falamos sobre código seguro Java.
Afinal, temos várias camadas para proteger.
  • Apresentação;
  • Negócio;
  • Persistência;
  • Infraestrutura.


Mas peraí! O java já é seguro certo?! De certa forma, sim. Ele é seguro.
 A linguagem possui uma lista extensa de itens que ajudam a aumentar a segurança, todos itens nativos que o usuário pode usufruir. Na lista  abaixo alguns deles: 

  • Gerência automática de memória
  • Verificações de limites em tempo de execução
  • Bibliotecas escritas quase que totalmente em Java, uso limitado de código nativo e comandos do SO
  • Security Managers
  • Classloaders
  • Gerencia de sessão HTTP
  • Autenticação e Autorização JAAS +
  • Segurança Declarativa
  • JCE e JSSE
  • Prepared Statements e consultas JPQL parametrizadas
  • Tag <c:out/> do JSTL
  • Fragmentos JSP  
  • recursos em WEB-INF

Concorda comigo que não adianta ter tudo acima de forma nativa, adicionar frameworks para facilitar o desenvolvimento e no fim de tudo facilitar o trabalho de hackers, porque você não soube proteger seu código ?  

Ok! Java é seguro, mas que tal olhar alguns pontos para proteger seu código?  

Aplicáveis para todo o sistema:
  • Cada módulo deve garantir a sua segurança (inclusive validação de dados);
  • Usar mecanismos criptográficos adequados;
  • Validar unboxing para tipos primitivos;
  • Usar os mecanismos de tratamento de exceções;
  • Tratar corretamente todos os erros da aplicação;
  • Usar objetos imutáveis;
  • Verificar métodos nativos (“native methods”);
  • Limitar o acesso às variáveis, classes e métodos;
  • Não armazenar vetores recebidos como parâmetros;
  • Declarar as variáveis estáticas públicas como “final”;
  • Tornar todos os métodos e classes “final”;
  • Não comparar classes por nome;
  • Não usar classes internas (“inner class”);
  • Não usar o escopo de pacote para proteger a classe contra acessos indesejados;
  • Verificar condições de “overflow”, “underflow” e conversões de tipos numéricos;
  • Não armazenar informações confidenciais no código do programa;
  • Apagar dados críticos da memória.

Camada de Apresentação:
  • Proteger a aplicação web contra cross site scripting;
  • Evitar ataques de CSRF;
  • Validar a origem das requisições;
  • Controle de acesso;
  • Criar nova sessão após a autenticação do usuário;
  • Garantir a segurança dos identificadores de sessão (cookies);
  • Evitar nomes de arquivos como parâmetros;
  • Não utilizar "open redirect";
  • Usar corretamente POST e GET;
  • Segregar a interface de administração;
Camada de Negócio:
  • Impedir a clonagem dos objetos;
  • Usar classes não serializáveis;
  • Usar classes não desserializáveis;
Camada de Persistência:
  • Evitar "command injection";
  • Especificar o diretório onde serão criados os arquivos temporários;
  • Proteger os arquivos criados;
  • Evitar "super-usuários" para acessos a bases de dados;
Infra-estrutura:
  • Usar os mecanismos de autenticação padronizados;
  • Usar sockets com criptografia SSL;

No próximo post, irei explicar os itens das camadas Java. Então fiquem ligados! 
Até a próxima \o.

About thallitaceleste

0 comments:

Postar um comentário