image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF

AJ

Antonio Junior25/02/2025 13:57
Compartilhe
Nexa - Análise Avançada de Imagens e Texto com IA na AWSRecomendados para vocêNexa - Análise Avançada de Imagens e Texto com IA na AWS

Algumas práticas essenciais de segurança para desenvolvimento web com Java

    A segurança não é uma opção quando falamos de aplicações web modernas - é um requisito fundamental. Em um cenário onde ataques cibernéticos crescem de forma assustadora, nós como desenvolvedores Java precisamos incorporar práticas de segurança desde o primeiro dia de desenvolvimento.

    Neste artigo, você descobrirá algumas das estratégias de proteção para suas aplicações Java.

    Por que a segurança em Java é um diferencial competitivo?

    Java se mantém como uma das linguagens mais seguras para desenvolvimento web, o java oferece mecanismos robustos de proteção, mas cabe a nós utiliza-los corretamente.

    Grande parte das violações de dados começam com falhas que poderiam ser evitadas com práticas básicas de segurança. Portanto, domina-las é um ativo valioso.

    Algumas práticas essenciais de segurança para desenvolvimento web com Java

    Proteção contra SQL Injection

    SQL Injection é uma das vulnerabilidades mais exploradas em aplicações web. No Java, você pode prevenir estes ataques usando o Prepared Statements:

    // Prática insegura (NUNCA FAÇA ISSO)
    String query = "SELECT * FROM users WHERE username = '" + username + "'";
    
    
    // Prática segura com PreparedStatement
    String query = "SELECT * FROM users WHERE username = ?";
    PreparedStatement pstmt = connection.prepareStatement(query);
    pstmt.setString(1, username);
    ResultSet rs = pstmt.executeQuery();
    

    Frameworks como Hibernate e JPA podem auxiliar, eliminando a necessidade de consultas SQL diratamente no codigo.

    Implementação adequada de autenticação e autorização

    Spring Security é uma das bibliotecas mais utilizadas para implementar autenticação e autorização em aplicações Java. Veja como implementar autenticação básica:

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
      
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
                  .antMatchers("/public/**").permitAll()
                  .antMatchers("/admin/**").hasRole("ADMIN")
                  .anyRequest().authenticated()
              .and()
              .formLogin()
                  .loginPage("/login")
                  .permitAll();
      }
      
      @Override
      protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          auth.inMemoryAuthentication()
              .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
              .and()
              .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
      }
      
      @Bean
      public PasswordEncoder passwordEncoder() {
          return new BCryptPasswordEncoder();
      }
    }
    

    Implementação de HTTPS

    HTTPS é obrigatório para qualquer aplicação web moderna. Em aplicações Spring Boot, você pode configurar HTTPS de forma simples, por exemplo:

    # application.properties
    server.port=8443
    server.ssl.key-store=classpath:keystore.p12
    server.ssl.key-store-password=your-password
    server.ssl.key-store-type=PKCS12
    server.ssl.key-alias=tomcat
    

    Criando um config para o redirecionamento de HTTP para HTTPS:

    @Configuration
    public class HttpsConfig {
      
      @Bean
      public ServletWebServerFactory servletContainer() {
          TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
              @Override
              protected void postProcessContext(Context context) {
                  SecurityConstraint securityConstraint = new SecurityConstraint();
                  securityConstraint.setUserConstraint("CONFIDENTIAL");
                  SecurityCollection collection = new SecurityCollection();
                  collection.addPattern("/*");
                  securityConstraint.addCollection(collection);
                  context.addConstraint(securityConstraint);
              }
          };
          tomcat.addAdditionalTomcatConnectors(redirectConnector());
          return tomcat;
      }
      
      private Connector redirectConnector() {
          Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
          connector.setScheme("http");
          connector.setPort(8080);
          connector.setSecure(false);
          connector.setRedirectPort(8443);
          return connector;
      }
    }
    

    Ferramentas de análise de segurança para Java

    Além de implementar práticas seguras, é importante verificar regularmente sua aplicação contra vulnerabilidades conhecidas. Deixo aqui algumas ferramentas que podem auxiliar nesse trabalho:

    • OWASP Dependency-Check: verifica dependências contra vulnerabilidades conhecidas
    • SonarQube: identifica problemas de segurança no código (Pode instalar o plugin em seu IDE que já ajuda bastante)

    A segurança em aplicações devem ser consideradas no desenvolvimento desde o primeiro dia.

    Compartilhe
    Recomendados para você
    Microsoft Certification Challenge #3 DP-100
    Decola Tech 2025
    Microsoft AI for Tech - Copilot Studio
    Comentários (1)
    DIO Community
    DIO Community - 26/02/2025 15:16

    Ótima abordagem, Antonio! A segurança no desenvolvimento web com Java não pode ser um pensamento posterior, mas sim uma prática essencial desde o início do ciclo de desenvolvimento. Seu artigo destaca pontos críticos, como proteção contra SQL Injection, implementação de autenticação segura com Spring Security e a obrigatoriedade do HTTPS, garantindo que as aplicações sejam mais resilientes contra ataques cibernéticos.

    Na DIO, incentivamos a adoção de ferramentas de análise de segurança, como OWASP Dependency-Check e SonarQube, para identificar vulnerabilidades antes que se tornem riscos reais. A implementação de métodos seguros de autenticação e autorização é crucial, assim como a adoção de práticas recomendadas para criptografia e armazenamento de credenciais.

    Diante do crescimento da nuvem e das arquiteturas distribuídas, qual você considera ser o maior desafio na segurança de microserviços Java modernos, e como acredita que o Spring Security pode ser ainda mais aprimorado nesse cenário?

    Recomendados para você