Segurança de aplicações Java: top 10 vulnerabilidades — parte 2

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Segurança de aplicações Java: top 10 vulnerabilidades — parte 2

Na primeira parte, abordamos as cinco primeiras vulnerabilidades críticas de aplicações Java. Hoje continuamos o aprendizado e examinamos as cinco ameaças restantes que todo desenvolvedor deve conhecer. Java para iniciantes e programadores experientes — estas informações ajudarão você a escrever um código mais seguro. No mundo da programação, segurança não é uma opção, mas uma necessidade.

6. Entidades XML externas (XXE)

Os ataques XXE ocorrem quando a aplicação processa documentos XML que contêm referências a entidades externas. Um atacante pode ler arquivos locais, realizar um ataque SSRF ou causar negação de serviço.

Código vulnerável

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));

Proteção

  • Desative entidades externas e DTD
  • Use parsers seguros
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

7. Desserialização insegura

A desserialização de dados não confiáveis pode levar à execução de código arbitrário. Esta é uma das vulnerabilidades mais perigosas em Java, pois frequentemente permite comprometer completamente o servidor.

Exemplo de ataque

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));
Object obj = ois.readObject(); // perigoso!

Métodos de proteção

  • Não desserialize dados de fontes não confiáveis
  • Use listas brancas de classes
  • Utilize formatos alternativos (JSON, Protocol Buffers)

8. Injeção de SQL

Embora seja um clássico da programação, as injeções de SQL ainda ocorrem em aplicações Java. Sempre use consultas parametrizadas.

Incorreto (vulnerável)

String query = "SELECT * FROM users WHERE name = '" + userName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Correto (seguro)

String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, userName);
ResultSet rs = pstmt.executeQuery();

Para Java para iniciantes, esta regra deve ser um axioma: nunca concatene strings para consultas SQL.

9. Falhas de autenticação e gerenciamento de sessão

Autenticação fraca, sessões vulneráveis e gerenciamento incorreto de senhas são problemas comuns em aplicações web em Java.

Recomendações

  • Use algoritmos modernos de hash de senhas (bcrypt, Argon2)
  • Configure o tempo de vida correto da sessão
  • Utilize cookies seguros (HttpOnly, Secure, SameSite)
  • Implemente autenticação multifator

10. Uso de componentes com vulnerabilidades conhecidas

O ecossistema Java é rico em bibliotecas, mas muitos projetos usam versões desatualizadas com CVEs públicos. Este é um dos problemas de segurança mais comuns.

Como se proteger

  • Atualize regularmente as dependências
  • Use ferramentas de análise (OWASP Dependency-Check, Snyk)
  • Inscreva-se para notificações de segurança das bibliotecas utilizadas
  • Auto

Blogs

Book Recommendations