Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:seguridad

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

Figure 1: OWASP Top 10 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 de Statement
    • No construir las sentencias SQL concatenando variables

© 2024 Santiago Faci

apuntes/seguridad.txt · Last modified: 2023/06/03 19:06 by Santiago Faci