Segurança de aplicações Java: top 10 vulnerabilidades na prática

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 na prática



A segurança de aplicações Java não é apenas uma marcação em uma lista de verificação, mas um aspecto criticamente importante do desenvolvimento. De acordo com a OWASP, mais de 70% das aplicações web modernas contêm pelo menos uma vulnerabilidade crítica. Neste artigo, analisaremos as 10 ameaças mais comuns com exemplos reais de código e formas de corrigi-las. O material será útil tanto para desenvolvedores Java iniciantes quanto para os experientes.



1. SQL Injection (Injeção)

O SQL Injection continua sendo o líder entre as vulnerabilidades. O atacante pode inserir código SQL malicioso através da entrada do usuário.



Código vulnerável:

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


Código corrigido (uso de PreparedStatement):

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


2. XSS (Cross-Site Scripting)

Ataques XSS permitem a injeção de scripts do lado do cliente em páginas web. A principal defesa é a sanitização da saída.



Código vulnerável (JSP):

<%= request.getParameter("comment") %>


Código corrigido:

<%= Encode.forHtml(request.getParameter("comment")) %>


Use a biblioteca OWASP Java Encoder para uma sanitização confiável:

import org.owasp.encoder.Encode;String safeOutput = Encode.forHtml(userInput);


3. Desserialização insegura

A desserialização em Java pode levar à execução remota de código (RCE).



Código vulnerável:

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


Recomendações de proteção:

  • Não desserializar dados de fontes não confiáveis
  • Usar uma lista branca de classes durante a desserialização
  • Aplicar JSON ou XML em vez da serialização Java


// Abordagem segura com verificação de classeObjectInputStream ois = new ObjectInputStream(inputStream) {    @Override    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {        if (!allowedClasses.contains(desc.getName())) {            throw new InvalidClassException(desc.getName(), "Unauthorized deserialization");        }        return super.resolveClass(desc);    }};


4. CSRF (Cross-Site Request Forgery)

Ataques CSRF forçam o usuário a executar ações indesejadas em um site onde ele está autenticado.



Proteção com tokens (Spring Security):

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());    }}


Adicionando o token ao formulário:

<form action="/transfer" method="POST">    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>    <input type="text" name="amount"/>    <button type="submit">Transferir</button></form>


5. Vazamento de informações através de exceções

Mensagens de erro detalhadas podem revelar a estrutura interna da aplicação.



Código vulnerável:

try {    // lógica de negócio} catch (SQLException e) {    response.getWriter().println("Erro: " + e.getMessage()); // Vazamento!}


<

Blogs

Book Recommendations