¿A qué nos referimos cuando decimos que un código es seguro?
Cuando hablamos de un código que sea seguro, nos referimos a que ha sido diseñado de forma que se pueda minimizar las vulnerabilidades y riesgos posibles, también tiene que ser un código que proteja tanto la disponibilidad de los datos como que pueda afrontar algunas amenazas o ataques virtuales.
Algunos trucos o consejos para la mejora del software son los siguientes.
Consejos para la mejora de seguridad del código.
1. Encriptación de datos
La encriptación de datos es de los componentes mas importantes cuando hablamos de seguridad en el código, este proceso convierte todos los datos en una clave que será la que se guarde en las bases de datos y se desencriptará cuando lo pidamos.
Para ello podemos usar dependencias como spring-boot-security, que se podrá configurar la clase como a continuación:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public").permitAll()
.antMatchers("/private").authenticated()
.and()
.httpBasic();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("usuario")
.password(passwordEncoder().encode("contraseña"))
.roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
2. Validación de entradas
Se deberá hacer validaciones para prevenir un ataque SQL Injection por ejemplo…
Una de las formas puede ser cambiando los parámetros de las consultas en SQL en vez de poner los valores directos.
Ejemplo Bien hecho usando @Param:
@Query(SELECT * FROM EJEMPLO e WHERE e.param1 = :primerDato AND e.param2 = :segundoDato")
EJEMPLO findParam1AndParam2(@Param("primerDato") String primerDato, @Param("segundoDato") String segundoDato)
Ejemplo Mal hecho:
@Query(SELECT * FROM EJEMPLO e WHERE e.param1 = '${primerDato}' AND e.param2 = '${segundoDato}'")
EJEMPLO findParam1AndParam2(String primerDato, String segundoDato)
3. Gestión de errores y logs:
Hasta el mejor código del mundo puede tener errores y muchas veces pueden apuntar a vulnerabilidades del programa, por eso es aconsejable una gestión de los errores para poder amortiguar el impacto que pueda tener contra el programa.
Algunos cambios a tener en cuenta pueden ser los siguientes:
- Logs detallados y con contexto.
- Código de estados significativos.
- Implementación de un manejo centralizado de errores.
4. Tokens y seguridad de la sesión
Empezar a utilizar tokens para el manejo de peticiones, así nos aseguraremos de que nadie que no queramos pueda enviar y recibir peticiones.
También es recomendable el uso de expiración de dichos token de sesión.
5. Actualizaciones constantes
Por último uno de los mejores tips que se puede dar es que sigamos en constante actualización e implantación de parches al código para protegernos contra vulnerabilidades que se puedan ir encontrando…
Conclusión
Hay muchos mas trucos y consejos que se pueden implementar a tu código para conseguirlo que sea mas seguro, pero en conclusión con la ayuda de los anteriores dados podremos crear un entorno más seguro y protegido del cual podremos confiarnos.