programación defensiva


La programación defensiva es una forma de diseño defensivo destinado a garantizar la función continua de una pieza de software en circunstancias imprevistas. Las prácticas de programación defensiva se utilizan a menudo cuando se necesita alta disponibilidad , seguridad o protección .

Sin embargo, la programación demasiado defensiva puede proteger contra errores que nunca se encontrarán, lo que genera costos de tiempo de ejecución y mantenimiento. También existe el riesgo de que las trampas de código impidan demasiadas excepciones , lo que puede dar lugar a resultados incorrectos que pasan desapercibidos.

La programación segura es el subconjunto de la programación defensiva relacionada con la seguridad informática . La seguridad es la preocupación, no necesariamente la seguridad o la disponibilidad ( se puede permitir que el software falle de ciertas maneras). Al igual que con todo tipo de programación defensiva, evitar errores es un objetivo principal; sin embargo, la motivación no es tanto reducir la probabilidad de fallas en el funcionamiento normal (como si la seguridad fuera la preocupación), sino reducir la superficie de ataque: el programador debe suponer que el software podría ser mal utilizado activamente para revelar errores y que los errores podrían explotarse maliciosamente.

La función dará como resultado un comportamiento indefinido cuando la entrada tenga más de 1000 caracteres. Algunos programadores novatos pueden no sentir que esto sea un problema, suponiendo que ningún usuario ingresará una entrada tan larga. Este error en particular demuestra una vulnerabilidad que permite explotar el desbordamiento del búfer . Aquí hay una solución a este ejemplo:

La programación ofensiva es una categoría de programación defensiva, con el énfasis adicional de que ciertos errores no deben manejarse a la defensiva . En esta práctica, solo se manejarán los errores que estén fuera del control del programa (como la entrada del usuario); en esta metodología se debe confiar en el software en sí, así como en los datos dentro de la línea de defensa del programa .

Si se prueba el código existente y se sabe que funciona, reutilizarlo puede reducir la posibilidad de que se introduzcan errores.