Segurança de aplicações Java: top 10 vulnerabilidades para iniciantes

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 para iniciantes

\n

O Java continua sendo uma das linguagens mais populares para criar aplicações corporativas e web. No entanto, mesmo uma plataforma confiável não garante a segurança do código. De acordo com a OWASP, a maioria das invasões ocorre devido a erros dos desenvolvedores, e não devido a vulnerabilidades na JVM. Neste artigo, vamos abordar as top 10 vulnerabilidades de aplicações Java que todo desenvolvedor iniciante deve conhecer. Você obterá não apenas conhecimento teórico, mas também exemplos práticos de código com explicações sobre como evitar erros perigosos.

\n\n

1. SQL Injection

\n

A ameaça mais comum. Um atacante pode executar uma consulta SQL arbitrária se você concatenar strings diretamente.

\n

Exemplo ruim (código vulnerável):

\n
String query = "SELECT * FROM users WHERE username = '" + userName + "' AND pass = '" + password + "'";\nStatement stmt = connection.createStatement();\nResultSet rs = stmt.executeQuery(query);
\n

Solução: use PreparedStatement com consultas parametrizadas.

\n
String query = "SELECT * FROM users WHERE username = ? AND pass = ?";\nPreparedStatement pstmt = connection.prepareStatement(query);\npstmt.setString(1, userName);\npstmt.setString(2, password);\nResultSet rs = pstmt.executeQuery();
\n\n

2. Cross-Site Scripting (XSS)

\n

Se você exibir dados do usuário em HTML sem escapá-los, um atacante pode injetar código JavaScript.

\n

Código vulnerável (JSP):

\n
<%= request.getParameter("message") %>
\n

Proteção: escape a saída usando bibliotecas (por exemplo, OWASP Java Encoder) ou use mecanismos de template com auto-escaping (Thymeleaf, JSP com JSTL).

\n
<c:out value="${message}" />
\n\n

3. Desserialização insegura

\n

A desserialização em Java pode levar à execução remota de código (RCE) se um atacante enviar um fluxo de bytes especialmente criado.

\n

Má prática:

\n
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());\nObject obj = ois.readObject(); // qualquer coisa pode ser restaurada
\n

Recomendações:

\n
    \n
  • Nunca desserialize dados de fontes não confiáveis.
  • \n
  • Use listas brancas de classes (look-ahead object input stream).
  • \n
  • Considere alternativas (JSON, Protobuf).
  • \n
\n\n

4. Injeção de comandos do SO (Command Injection)

\n

Se sua aplicação chama comandos do sistema com dados do usuário, é possível ocorrer injeção.

\n

Código perigoso:

\n
Runtime.getRuntime().exec("ping " + userInput); // userInput = 127.0.0.1; rm -rf /
\n

Proteção: evite chamar comandos shell, use bibliotecas Java integradas. Se a chamada for inevitável — valide os dados de entrada com uma lista branca rigorosa.

\n\n

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

\n

Proteção de sessão fraca é um problema comum. Por exemplo, uso de identificadores de sessão previsíveis ou armazenamento de senhas em texto claro.

\n
    \n
  • Gere IDs de sessão usando SecureRandom.
  • \n
  • Use hashing moderno (bcrypt, scrypt, Argon2) para senhas.
  • \n
  • Defina timeouts de sessão e flags HttpOnly/Secure para cookies.
  • \n
\n\n

6. Configuração insegura (Security Misconfiguration)

\n

Modos de depuração deixados ativos, senhas padrão, portas abertas — tudo isso dá ao atacante informações sobre o sistema.

\n

O que verificar no Spring Boot:

\n
    \n
  • Desative os endpoints do Actuator em produção ou proteja-os.
  • \n
  • Não use spring.jpa.show-sql=true em produção.
  • \n
  • Remova cabeçalhos de servidor padrão

Blogs

Book Recommendations