La educación de seguridad debe ser contextual. No hay mucho que decir acerca de la seguridad cuando se estudian árboles de color rojo-negro o se combinan. Pero la seguridad debe ser un factor constante y generalizado como parte de todo lo que hace el estudiante.
Cualquier ítem relacionado con la seguridad debe ser requerido como una cuestión de curso; La verificación de límites y el saneamiento de entradas, por ejemplo, deben ser absolutamente necesarios en todas las tareas. Si el examinador puede interrumpir la aplicación de tareas al proporcionar una entrada no válida, entonces se deben deducir los puntos. Si los límites de la matriz no se verifican correctamente (asumiendo un lenguaje inseguro como C), apaga. No debería ser suficiente con que la cosa pase el caso de prueba asignado, también tiene que estar lo suficientemente escrito para que en un escenario del mundo real no cause un desastre.
Los estudiantes deben estar acostumbrados a siempre preocuparse por la robustez y la seguridad de la misma manera que los estudiantes de química siempre deberían preocuparse por la seguridad del laboratorio. La seguridad no es algo que estudias un semestre y luego continúas.
Si va a tener una sola conferencia al principio sobre seguridad, entonces debería cubrir principalmente las expectativas relacionadas con la seguridad que los estudiantes estarán bajo. Estas expectativas deben ser expectativas del mundo real con respecto a las prácticas de codificación y deben reflejar el tipo de vigilancia que siempre está en el fondo de la mente para un buen programador.
Esto se divide en varias áreas principales, y no todas son apropiadas para cada lenguaje y cada entorno de programación, aquí hay algunas que vienen a la mente:
Seguridad del lenguaje : un problema extremadamente grande con C / C ++, no tanto con casi todo lo demás. Los punteros, los buffers y ese tipo de cosas entran en esta categoría.
Desinfección de entrada : enorme. Absolutamente enorme. No puedo pensar en una sola área en la que esto no sea aplicable.
-
Claridad de código y documentación : vale más de lo que parece. Muchas vulnerabilidades de seguridad provienen de errores simples que se derivan de una mala interpretación del código en sí. Cuantos menos errores cometa, mejor, incluso en el contexto de la seguridad.
Además, incluiría principios como "DRY" en esta combinación, ya que las vulnerabilidades de seguridad a veces son el resultado de suposiciones que no están sincronizadas dentro del código. Cuantos más lugares especifique un solo valor, más probable será que se olvide de cambiar uno de ellos, lo que puede provocar vulnerabilidades de seguridad. Recuerdo una regla de tarea "sin números mágicos" cuando estudié CS, donde todas las constantes numéricas tenían que asignárseles un nombre. Es una buena política tener por muchas razones.
Aislamiento de privilegios : un poco más esotérico, pero importante en ciertos escenarios. El principio de privilegio mínimo es algo con lo que los estudiantes necesitan al menos estar familiarizados, por ejemplo; pero es difícil hacer parte de tu actividad diaria.
-
Elementos específicos de seguridad : como el almacenamiento de contraseñas, el cifrado y cosas por el estilo. Esto es más informativo que directamente aplicable con respecto al trabajo escolar, así que no estoy seguro de dónde encaja con respecto a la programación de lecciones.
Es importante aprender sobre ataques como CSRF y robo de tokens
ataques en el sentido más abstracto, pero probablemente no en un
Curso introductorio ya que es un poco avanzado.