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;
- Impedir a clonagem dos objetos;
- Usar classes não serializáveis;
- Usar classes não desserializáveis;
- 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;
- 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.
Até a próxima \o.
0 comments:
Postar um comentário