¿Cómo, si es que existen, algunos lenguajes de programación son intrínsecamente menos seguros?

7

¿Puede ser que las aplicaciones escritas en ciertos idiomas sean intrínsecamente menos seguras, sin importar lo difícil que sea tratar de aclararlas?

O, ¿puede ser que algunos paradigmas de programación sean menos seguros que otros?

Es decir, ¿debería el desarrollo de software crítico para la seguridad considerar evitar, o usar (o usar con cuidado) ciertos idiomas?

    
pregunta Quora Feans 16.03.2016 - 13:29
fuente

1 respuesta

9

La programación segura es un subconjunto de la programación correcta ; cada vulnerabilidad explotable es, básicamente, un error tal que las consecuencias de ejercer el error son ventajosas para una persona malintencionada (el "atacante" ).

Los lenguajes ofrecen instalaciones que ayudan o no ayudan a hacer una programación correcta. Por ejemplo, si la tarea en cuestión implica hacer cosas con cadenas de caracteres, los idiomas que tienen un tipo inherente para las cadenas de caracteres, manejados como valores inmutables, hacen las cosas mucho más fáciles para el desarrollador. Muchos lenguajes modernos como C #, Python, PHP o incluso Javascript entran en esa categoría. A la inversa, más lenguajes de bajo nivel como C y Assembly requieren que el desarrollador maneje la asignación de buffers que sostienen cadenas, cuidando todas las longitudes y la desasignación en el momento adecuado. En ese sentido, C y Assembly son lenguajes "menos seguros" que la mayoría de los otros cuando se trata de manejar cadenas de caracteres, ya que requieren más cuidado del desarrollador. "Cuidado" es un recurso escaso.

En el mismo sentido, algunos idiomas incluyen mucha "magia", como la trans-tipificación automática, lo que significa que una expresión aparentemente simple puede ocultar mucha complejidad, que puede morder al desarrollador incauto. Algunos lenguajes modernos como C #, Python, PHP o Javascript tienen ese defecto. A la inversa, los lenguajes de bajo nivel como C y Assembly tienden a ser "más seguros", ya que todo lo que hacen es explícito. El desarrollador solo tiene que leer lo que está frente a sus ojos, con menos inferencias mentales sobre lo que hará el intérprete / compilador. "Pensar en el tiempo" es un recurso escaso.

No hay paradigma que sea intrínsecamente menos seguro que cualquier otro; sin embargo, la falta de un paradigma definido es seguramente menos segura. La programación segura, en última instancia, se trata de un desarrollador que sabe lo que está haciendo, y esto proviene de la disciplina .

Editar: "Disciplina" significa nunca escribir cualquier código cuyo comportamiento completo, bajo todas las combinaciones posibles de datos de entrada normales y anormales, no sea totalmente comprendido por el desarrollador. En particular, implica no tirar el código juntos y ajustar hasta que la cosa acepte ejecutarse. De manera similar, copiar y pegar desde Stack Overflow es una disciplina deficiente: leer las soluciones en SO es muy buena, pero debe ser seguida por comprensión completa de lo que hace el código.

    
respondido por el Tom Leek 16.03.2016 - 13:41
fuente

Lea otras preguntas en las etiquetas