Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Obsolete

Abstract
El uso de funciones en desuso u obsoletas podría indicar código sin atender.
Explanation
En general, a medida que evolucionan los lenguajes de programación, los métodos se quedan obsoletos de vez en cuando debido a:

- Los avances en el lenguaje
- El conocimiento mejorado del modo seguro y eficaz en que deben realizarse las
operaciones
- Los cambios en las convenciones que rigen determinadas operaciones

Las instrucciones que se quitan de un lenguaje normalmente se reemplazan por homólogos más recientes que realizan la misma tarea de alguna manera diferente y, con suerte, mejor.

En concreto, SAP ABAP ha evolucionado para incluir objetos ABAP, la extensión orientada a objetos de ABAP y para operar en un entorno Unicode compatible. Como resultado, se exige una sintaxis más estricta en las clases o los programas Unicode. Las construccionesobsoletas todavía están disponibles por razones de compatibilidad con versiones anteriores únicamente y solo se puede acceder a ellos fuera de las clases o en programas que no sean Unicode. Hay construcciones de reemplazo para todos los elementos de lenguaje obsoletos, que mejoran la eficiencia y legibilidad de los programas. Muchas especificaciones de memoria, longitud y tipo implícitas y ambiguas de la sintaxis obsoleta deben especificarse de un modo más preciso y explícito en la nueva sintaxis. Se recomienda que adopte la nueva sintaxis para que los programas se entiendan mejor, sean más robustos y más fáciles de mantener.


No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
desc.semantic.abap.obsolete
Abstract
El uso de funciones en desuso u obsoletas podría indicar código sin atender.
Explanation
A medida que evolucionan los lenguajes de programación, las funciones se vuelven a veces obsoletas debido a los siguientes motivos:

- Los avances en el lenguaje
- El conocimiento mejorado del modo seguro y eficaz en que deben realizarse las
operaciones
- Los cambios en las convenciones que rigen determinadas operaciones


Las funciones eliminadas de un lenguaje suelen reemplazarse por equivalentes más recientes que realizan la misma tarea de forma ligeramente diferente y es de esperar que también de forma más eficaz.
Ejemplo: el siguiente código crea un nuevo objeto SqlClientPermission, que controla el modo en que los usuarios pueden conectarse a una base de datos. En este ejemplo, el programa transfiere false como segundo parámetro al constructor, que controla si los usuarios tienen permiso para establecer conexión con contraseñas en blanco. Al transferir el valor "false" a este parámetro, se indica que no deben permitirse contraseñas en blanco.


...
SCP = new SqlClientPermission(pstate, false);
...


Sin embargo, como el objeto PermissionState transferido como primer parámetro reemplaza cualquier valor transferido al segundo parámetro, el constructor permite el uso de contraseñas en blanco para las conexiones de base de datos, lo que contradice el segundo argumento. Para rechazar las contraseñas en blanco, el programa debe transferir PermissionState.None al primer parámetro del constructor. Debido a la ambigüedad en su funcionalidad, la versión de dos parámetros del constructor SqlClientPermission se ha dejado de utilizar en favor de la versión de un único parámetro, que transmite el mismo grado de información sin el riesgo de interpretaciones erróneas.

No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
desc.semantic.dotnet.obsolete
Abstract
El uso de funciones en desuso u obsoletas podría indicar código sin atender.
Explanation
A medida que evolucionan los lenguajes de programación, las funciones se vuelven a veces obsoletas debido a los siguientes motivos:

- Los avances en el lenguaje.
- Conocimiento mejorado de cómo las operaciones deben realizarse de forma eficaz y segura.
- Los cambios en las convenciones que rigen determinadas operaciones.

Las funciones que se eliminan suelen reemplazarse por equivalentes más recientes que realizan la misma tarea de forma ligeramente diferente y es de esperar que también de forma más eficaz.
Ejemplo: el siguiente código usa la función en desuso getpw() para comprobar que una contraseña de texto sin formato coincide con una contraseña cifrada del usuario. Si la contraseña es válida, la función establece result en 1; de lo contrario, se establece en 0.


...
getpw(uid, pwdline);
for (i=0; i<3; i++){
cryptpw=strtok(pwdline, ":");
pwdline=0;
}
result = strcmp(crypt(plainpw,cryptpw), cryptpw) == 0;
...


Aunque el código suele tener un comportamiento correcto, el uso de la función getpw() puede provocar problemas desde el punto de vista de la seguridad, ya que puede desbordar el búfer que pasa a su segundo parámetro. Debido a esta vulnerabilidad, getpw() se ha sustituido por getpwuid(), que realiza la misma búsqueda que getpw(), pero que devuelve un puntero a una estructura asignada estadísticamente para mitigar el riesgo.

No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
desc.semantic.cpp.obsolete
Abstract
El uso de funciones desusadas u obsoletas podría indicar código desatendido o el uso de una versión anticuada de ColdFusion.
Explanation
A medida que evolucionan los lenguajes de programación, los métodos se vuelven obsoletos de vez en cuando debido a:

- Los avances en el lenguaje
- El conocimiento mejorado del modo seguro y eficaz en que deben realizarse las
operaciones
- Los cambios en las convenciones que rigen determinadas operaciones

Los métodos que se quitan de un lenguaje normalmente se reemplazan por homólogos más recientes que realizan la misma tarea de alguna manera diferente y, con suerte, mejor.


No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
desc.semantic.cfml.obsolete
Abstract
El uso de funciones en desuso u obsoletas podría indicar código sin atender.
Explanation
A medida que evolucionan los lenguajes de programación, los métodos se vuelven obsoletos de vez en cuando debido a:

- Los avances en el lenguaje
- El conocimiento mejorado del modo seguro y eficaz en que deben realizarse las
operaciones
- Los cambios en las convenciones que rigen determinadas operaciones

Los métodos que se quitan de un lenguaje normalmente se reemplazan por homólogos más recientes que realizan la misma tarea de alguna manera diferente y, con suerte, mejor.
Ejemplo: el siguiente código crea un objeto de cadena a partir de una matriz de bytes y un valor que especifica los 8 bits principales de cada carácter Unicode de 16 bits.


...
String name = new String(nameBytes, highByte);
...


En este ejemplo, es posible que el constructor no pueda convertir correctamente bytes en caracteres según el juego de caracteres que se utilice para codificar la cadena representada por nameBytes. Debido a la evolución de los juegos de caracteres utilizados para codificar cadenas, este constructor quedó obsoleto y reemplazado por un constructor que acepta como uno de sus parámetros el nombre del charset que se utiliza para codificar los bytes para la conversión.

No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
References
[1] MET02-J. Do not use deprecated or obsolete classes or methods CERT
desc.semantic.java.obsolete
Abstract
El uso de funciones en desuso u obsoletas podría indicar código sin atender.
Explanation
A medida que evolucionan los lenguajes de programación, los métodos se vuelven obsoletos de vez en cuando debido a:

- Los avances en el lenguaje
- El conocimiento mejorado del modo seguro y eficaz en que deben realizarse las
operaciones
- Los cambios en las convenciones que rigen determinadas operaciones.

Los métodos que se quitan de un lenguaje normalmente se reemplazan por homólogos más recientes que realizan la misma tarea de alguna manera diferente y, con suerte, mejor.
Ejemplo: el siguiente código utiliza la stdlib Digest::HMAC, cuyo uso está explícitamente contraindicado en la documentación debido a su implicación accidental dentro de una versión.


require 'digest/hmac'

hmac = Digest::HMAC.new("foo", Digest::RMD160)
...
hmac.update(buf)
...


En este ejemplo, la clase Digest::HMAC dejó de utilizarse de forma inmediata al estar implicada en una inclusión accidental dentro de una versión. Debido a la posibilidad de que no funcione según lo previsto a causa del código experimental o no probado adecuadamente, su uso está fuertemente contraindicado, especialmente si consideramos la relación que tienen los códigos HMAC con la funcionalidad criptográfica.

No todas las funciones están en desuso o se sustituyen porque supongan un riesgo de seguridad. Sin embargo, la presencia de una función obsoleta a menudo indica que el código que lo rodea se ha quedado sin atender y que puede estar en mal estado. La seguridad del software no ha sido una prioridad, o incluso una consideración, durante mucho tiempo. Si el programa utiliza las funciones en desuso u obsoletas, aumentará la probabilidad de que haya problemas de seguridad al acecho.
desc.structural.ruby.obsolete
Abstract
Se utiliza una función obsoleta.
Explanation
Debido a la naturaleza acelerada de los contratos inteligentes, las funciones y los operadores pueden quedar obsoletos con las versiones más nuevas del compilador y su uso puede generar código de baja calidad, efectos secundarios no deseados y/o errores de compilación.

Ejemplo 1: El siguiente código obtiene el hash del bloque actual usando block.blockhash(), que ha quedado obsoleto desde la versión 0.5.0 del compilador Solidity.


bytes32 blockhash = block.blockhash(0);
desc.structural.solidity.swc111