apuntes:seguridad
Table of Contents
Introducción a la programación segura
- Conjunto de técnicas que hacen el código de la aplicación más seguro y robusto
- Muchas veces consiste en hacer un buen uso de las palabras reservadas que el lenguaje proporciona
- Modificadores de accesibilidad, por ejemplo
- Tener en cuenta aspectos de diseño a la hora de desarrollar una aplicación
Más información en SEI CERT Oracle Coding Standar for Java y OWAS Top Ten Vulnerabilities
Control y validación del input de usuario
- Controlar siempre cualquier información que se introduzca en el programa por parte del usuario o cualquier entidad externa
- Validar siempre los parámetros de entrada de cualquier método
- Comprobar valores nulos, por ejemplo
- Validar siempre la información antes de añadirla al log de la aplicación
- Validar siempre la información antes de pasarla al método Runtime.exec()
- Normalizar antes de validar cualquier String
Normalizer.normalize(cadena, Form.NFKC)
Encapsulación
- Hay que evitar que se pueda acceder a aquellos atributos a los que no sea necesario
- Modificadores private, protected, public y por defecto
- Comprobar si realmente es necesario que se pueda extender de una clase o método
- Usar el modificar final al definir la clase o método
- Evitar que algunos métodos puedan extenderse:
clone
,toString
, . . .
- Evitar exponer referencias a objetos mutables
- Evitar el acceso a atributos o métodos que devuelve referencias a objetos mutables
Excepciones
- No ignorar ninguna checked Exception
printStackTrace
es útil para depurar pero no para una aplicación en producción
- Impedir que las excepciones expongan información sensible
- No lanzar excepciones genéricas, como por ejemplo
Exception
- Lanzar siempre la excepción específica para cada caso
- Nunca lanzar
NullPointerException
- Deberíamos corregir el código que genera ese error
Entrada/Salida
- Evitar serializar información sensible
- private transient String informacionSensible;
- Liberar los recursos después de su uso
- Cerrar los recursos: método
close()
- Utilizar try-with-resources (AutoClosable)
- Eliminar los ficheros temporales después de usarlos
Inyección de código
- Evitar la inyección de código SQL
- Utilizar
PreparedStatement
en lugar deStatement
- No construir las sentencias SQL concatenando variables
© 2024 Santiago Faci
apuntes/seguridad.txt · Last modified: 2023/06/03 19:06 by Santiago Faci