¿Qué deben aprender los estudiantes sobre seguridad en un curso de programación introductorio?

7

Algunas personas han abogado por que la seguridad se integre en los cursos de informática, en todo el plan de estudios. Supongamos que vamos a agregar una conferencia sobre seguridad a un primer curso de programación. (Tenga en cuenta que es un curso introductorio muy básico, por lo que los temas avanzados no son apropiados). ¿Cuáles son las cosas más importantes que los estudiantes deben aprender sobre seguridad, en ese contexto?

    
pregunta D.W. 16.03.2012 - 08:03
fuente

5 respuestas

4

Si solo va a ser una conferencia y esta es su primera clase de programación , creo que la validación de entrada es el tema más viable para repasar. Algunos de sus estudiantes ya estarán luchando para entender cómo x = x + 1 (x es igual a x + 1) cuando x = 1 solo la línea anterior ... eso es hasta que se dan cuenta de que es una declaración de asignación.

Los temas como cifrado, ssl e inyección de SQL deben integrarse en cursos que tengan proyectos relacionados para que se puedan aplicar en la práctica.

Sin embargo, la validación de entrada es algo que llevarán con ellos durante el resto de su carrera de ingeniería. Les ayudará a mitigar las posibilidades de que su código sea susceptible a desbordamientos de búfer, XSS y (tal vez) inyección de SQL.

    
respondido por el Tung 16.03.2012 - 10:34
fuente
8

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.

respondido por el tylerl 16.03.2012 - 09:04
fuente
2

Soy un estudiante universitario y tuve ese tipo de curso, primero de ellos, deberían enseñar cómo no cometer errores en la codificación, como protección contra Inyección de SQL, o cómo hacer su propia conexión y autorización SSL, y un poco sobre criptología, tuve como 7 sesiones de eso y todos los temas se explicaron bastante bien ... (Me refiero a que esos temas no eran solo conceptos básicos ...) Ahora, en mi opinión, debería haber una lección sobre cómo protegerse contra la inyección de SQL, y algunas cosas sobre la criptología, como el programa llamado PARI ..., deberían ser básicas

    
respondido por el globus25 16.03.2012 - 08:30
fuente
1

Independientemente del lenguaje utilizado en la educación, hay varios principios que son verdaderos, por lo que los robaré desde aquí Ninja de Seguridad

  1. Validación de entrada: siempre revise sus entradas de fuentes no confiables
  2. Validación de salida: asegúrate de que tu salida sea adecuada para el destino (por ejemplo, escapar de caracteres HTML ...)
  3. Tratamiento de errores: no le des demasiada información al atacante
  4. Autenticación & autorización - saber cómo hacerlo bien
  5. Gestión de sesiones
  6. Comunicaciones seguras
  7. Gestión segura de recursos
  8. Almacenamiento seguro

Aprenda y aplique esos principios y cualquier software desarrollado posteriormente será de una calidad mucho mejor.

    
respondido por el Colin Cassidy 16.03.2012 - 10:12
fuente
0

Matt Bishop ha escrito algunos artículos y tiene un prefacio en su libro que discute esto

nob.cs.ucdavis.edu/book/book-aands/index.html

    
respondido por el T. Webster 21.11.2012 - 07:10
fuente

Lea otras preguntas en las etiquetas