Segurança de aplicações Java: top 10 vulnerabilidades e como evitá-las

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

Introdução: Por que a segurança de aplicações Java não é uma opção, mas uma necessidade

Java continua sendo uma das linguagens mais populares para o desenvolvimento de aplicações corporativas e web. No entanto, a popularidade também atrai maior atenção de agentes maliciosos. De acordo com o OWASP (Open Web Application Security Project), vulnerabilidades no código levam anualmente a vazamentos de dados e perdas financeiras na casa dos bilhões de dólares. Neste artigo, abordaremos as 10 principais vulnerabilidades de aplicações Java, mostraremos exemplos reais de código e daremos recomendações específicas de proteção. O material será útil tanto para desenvolvedores iniciantes quanto para experientes que buscam escrever código seguro.



1. Injeções: SQL, LDAP e Command Injection

As injeções continuam sendo o rei das vulnerabilidades. O caso mais comum é a injeção de SQL, quando a entrada do usuário é concatenada diretamente em uma consulta SQL.

Exemplo de código vulnerável

String query = "SELECT * FROM users WHERE username = '" + request.getParameter("user") + "'";Statement stmt = connection.createStatement();ResultSet rs = stmt.executeQuery(query);

Se um invasor enviar admin' OR '1'='1, ele obterá acesso a todos os usuários.

Como se proteger

  • Use PreparedStatement: consultas parametrizadas escapam automaticamente a entrada.
  • Valide os dados de entrada no lado do servidor (listas brancas).
  • Para LDAP e comandos do SO, use escape e evite chamar Runtime.exec() com dados do usuário.
// Versão seguraString query = "SELECT * FROM users WHERE username = ?";PreparedStatement pstmt = connection.prepareStatement(query);pstmt.setString(1, request.getParameter("user"));ResultSet rs = pstmt.executeQuery();


2. Falha na autenticação e gerenciamento de sessões

A autenticação fraca é a segunda vulnerabilidade mais perigosa. São comuns: ausência de limite no número de tentativas de login, armazenamento de senhas em texto claro, IDs de sessão previsíveis.

Recomendações

  • Armazene senhas apenas como hashes com salt (ex.: bcrypt ou Argon2).
  • Use SecureRandom para gerar tokens de sessão.
  • Defina timeouts de sessão e um mecanismo "lembrar-me" com token seguro.
// Geração de session ID seguroimport java.security.SecureRandom;String sessionId = new SecureRandom().ints(48, 122)    .filter(i -> Character.isLetterOrDigit(i))    .limit(64)    .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)    .toString();


3. XSS (Cross-Site Scripting)

XSS permite injetar JavaScript malicioso em uma página visualizada por outros usuários. Isso é especialmente perigoso para aplicações web em Java com JSP ou Thymeleaf.

Exemplo de vulnerabilidade

<div>${userComment}</div>

Se userComment contiver <script>alert('XSS')</script>, o código será executado no navegador.

Proteção

  • Escape a saída: em JSP use c:out ou fn:escapeXml().
  • Para Thymeleaf — th:utext é perigoso, use th:text.
  • Aplique cabeçalhos de Content Security Policy (CSP).


4. Desserialização insegura

A desserialização em Java é uma das vulnerabilidades mais críticas, permitindo a execução de código arbitrário (RCE). Um invasor pode adulterar o fluxo de bytes e injetar um objeto malicioso.

Exemplo de ataque

ObjectInputStream ois = new ObjectInputStream(request.getInputStream());Object obj = ois.readObject(); // Perigo!

Como se proteger

  • Não desserialize

Blogs

Book Recommendations