Basándose en el análisis de código y el escaneo de 50.000 aplicaciones diferentes escritas en los últimos 18 meses, la empresa de seguridad en la nube Veracode ha elaborado una lista de los lenguajes de programación más y menos seguros. A los ingenieros de software no les resultará especialmente sorprendente, ya que PHP, sede de muchos hackeos populares y preparados, se lleva la palma.
El informe analizó un subconjunto de los lenguajes de programación/familias de lenguajes más utilizados hoy en día, incluyendo PHP, Java, Microsoft Classic ASP, .NET, iOS, Android, C y C++, JavaScript, ColdFusion, Ruby y COBOL. Alrededor del 86% de los programas analizados escritos en PHP presentaban al menos una vulnerabilidad de tipo cross-site scripting (XSS); el 56 revelaba al menos un fallo de inyección SQL y el 73% tenía problemas de codificación. De las aplicaciones escritas en el lenguaje ColdFusion, que desempeña una función de scripting web similar a la de PHP y que ya es bastante conocida por sus vulnerabilidades, el 62% reveló un fallo de inyección SQL.
Los lenguajes de desarrollo de secuencias de comandos/web salieron en general peor parados que sus homólogos más tradicionales, como Java y C++. El 21% de las aplicaciones Java presentaban vulnerabilidades de inyección SQL, mientras que el 29% de las aplicaciones escritas en el marco .NET de Microsoft, que sirve para unificar varios lenguajes fundamentales diferentes en un entorno de ejecución (como Java), presentaban la vulnerabilidad SQL.
Por supuesto, los distintos lenguajes se utilizan para cosas diferentes y, en muchos aspectos, comparar PHP con Java o C++ es como comparar manzanas y naranjas. El primero se utiliza para pegar Internet, esencialmente, mientras que el segundo se utiliza más para desarrollar software compilado/ejecutable. PHP se ejecuta dentro de un navegador web, mientras que Java (etc.) ejecuta el propio navegador web.
Pero eso es sólo una parte. En términos de diseño básico, algunos lenguajes son simplemente mejores en cuanto a seguridad.
«Cabe destacar que las vulnerabilidades web como la inyección SQL y el Cross-Site Scripting son sustancialmente más frecuentes en las aplicaciones escritas en lenguajes de scripting web como ASP clásico, ColdFusion y PHP, en comparación con las aplicaciones .NET y Java», explica el informe. «Es muy probable que esto se deba a las diferencias en el conjunto de características de cada lenguaje. Hay menos API de seguridad incorporadas en ASP clásico, PHP y ColdFusion que las que se han proporcionado para .NET y Java».
Java, en particular, tiene lo que se conoce como recolección automática de basura. Esto significa que el propio lenguaje (o su entorno de ejecución, la máquina virtual de Java) evitará que un programa haga cosas indebidas con la memoria del sistema. «Al eliminar la necesidad (y la capacidad) de que los desarrolladores asignen directamente la memoria, lenguajes como Java y la familia de lenguajes .NET evitan (casi) por completo las vulnerabilidades relacionadas con la asignación de memoria, sobre todo los desbordamientos de búfer», explica el informe de Veracode.
Parte del problema también tiene que ver con quién utiliza estos lenguajes y cuál es su nivel de experiencia. No te creas el bombo y platillo: Un curso intensivo de desarrollo web no va a enseñar lo mismo que años de formación en informática (de verdad).
«Los programas .NET y Java suelen ser utilizados por licenciados en informática que aprendieron esos lenguajes en la escuela», dijo Chris Wysopal, CTO de Veracode, a Information Week. «Muchos de los lenguajes de scripting, como ColdFusion y ASP, surgieron del mundo del desarrollo web, donde se diseñan sitios web y se empieza a aprender a codificar, [y] a hacer sitios más interactivos».