Artigo - Java Security

Segurança em códigos

Sistemas com segurança cibernética são fundamentais atualmente. O uso de IA para burlar sistemas cresceu rapidamente, com criação em massa de malwares, pequenas mudanças de scripts, vazamento de dados, direcionamento de usuários a sites falsos, ataques de força bruta e phishing. Isso gera desconfiança até em sites antes considerados confiáveis. Por isso, desenvolvedores precisam integrar segurança em seus serviços desde o início, garantindo disponibilidade, autenticidade e integridade dos dados — os três pilares da cibersegurança. Este artigo mostra ataques comuns, como são executados no frontend para prejudicar o backend, e apresenta soluções para minimizar riscos.

Linguagem Java e suas aplicações

Java é uma excelente ferramenta para desenvolvimento, com bibliotecas voltadas à segurança e tradição em sistemas robustos. Bancos, emissoras, softwares desktop e aplicativos mobile usam Java, tornando essencial a integração de segurança nesses produtos. Apesar de suas vulnerabilidades, Java conta com uma comunidade ativa e recursos atualizados para o mercado atual.

Ameaças de código

Injeção SQL

A injeção SQL é um ataque onde o invasor insere comandos maliciosos no banco de dados para obter acesso não autorizado. Exemplo de código vulnerável:

public static Usuario usuarioid(String idUsuario) throws SQLException {
    String sql = "SELECT * FROM usuario WHERE id = " + idUsuario;
    Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/login", "root", "");
    PreparedStatement statement = conexao.prepareStatement(sql);
    ResultSet rs = statement.executeQuery();
}

O problema é a falta de filtragem dos dados inseridos, permitindo que caracteres especiais sejam usados em ataques.

Injeção SQL Booleana

O atacante pode inserir OR 1=1-- para manipular a consulta:

SELECT * FROM tabela_login WHERE email = 1 OR 1=1 AND senha = 1 OR 1=1

Como 1=1 é sempre verdadeiro, o atacante consegue acesso sem credenciais válidas.

Injeção SQL com temporizador

Ataques que usam funções como SLEEP() podem deixar o servidor lento:

Login -> 1 + SLEEP(4)
Senha -> 1 + SLEEP(4)

SELECT * FROM login WHERE email=1 + SLEEP(4) AND senha=1 + SLEEP(4)

O sistema fica "congelado", prejudicando o desempenho do servidor.

Injeção SQL em erro

Mensagens de erro detalhadas podem revelar informações sensíveis sobre o banco de dados e a linguagem utilizada, facilitando ataques.

Solução

Sempre higienize as entradas de dados. Use consultas parametrizadas para evitar injeção de SQL, conforme recomendado pela OWASP:

String sql = "SELECT * FROM login WHERE email = ? AND senha = ?";
Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/login_exemplo", "root", "");
PreparedStatement prepaState = conexao.prepareStatement(sql);
prepaState.setString(1, Email);
prepaState.setString(2, Senha);
ResultSet rs = prepaState.executeQuery();

O uso de PreparedStatement protege contra ataques de injeção SQL.

Proteção contra XSS

O ataque XSS insere scripts maliciosos em sites legítimos. Ao clicar em elementos manipulados, o usuário pode ser direcionado a páginas falsas que coletam informações pessoais ou realizam phishing. Sempre valide e escape os dados exibidos ao usuário.


Referências:
Top 10 OWASP explicados: SQL Injection
SQL Injection em ambientes web
Segurança no desenvolvimento web com Java