¿Por qué gethosbyname () es tan malo como get () por diseño?

3

Sé que gethosbyname() ha estado obsoleto durante mucho tiempo. Pero veo que los analizadores estáticos informan que su uso es inseguro, y cuando los softwares eliminan su uso, tiende a ser por razones de seguridad.

Sé que recientemente se encontraron muchas fallas de seguridad dentro de las implementaciones (como fantasma) , pero varias cosas parecen indicar que la función también tiene defectos de diseño ...

    
pregunta user2284570 23.04.2016 - 22:57
fuente

2 respuestas

0

No tengo conocimiento de una razón de seguridad directa para evitar gethostbyname . No es como gets que no se puede usar sin correr el riesgo de un desbordamiento del búfer, excepto en condiciones altamente controladas donde la aplicación conoce el tamaño máximo posible de la entrada.

Una razón por la que gethostbyname está en desuso es que no es seguro para subprocesos, porque escribe su salida en un búfer compartido. En un programa multiproceso, se debe usar gethostbyname_r (si está disponible) en su lugar, o los subprocesos deben usar un mecanismo de sincronización para que solo un subproceso use el búfer compartido a la vez. Si el programador no estaba al tanto de esto, la aplicación puede tener un error que puede activarse al provocar llamadas en diferentes subprocesos casi al mismo tiempo; esto podría omitir un paso de autenticación, por ejemplo.

Otra razón por la que gethostbyname (y gethostbyname_r ) está en desuso es que no se puede manejar bien con IPv6. No permite que la aplicación elija la forma de dirección que desea. La consecuencia más probable es que la aplicación puede dejar de funcionar si se modifica alguna configuración relacionada con IPv6. Esto podría resultar en datos basura o incluso un desbordamiento del búfer en algún lugar si la aplicación recibe una dirección IPv6 cuando esperaba una dirección IPv4 y no verifica el campo h_addrtype del resultado (porque, en la mente del programador, no no era más que AF_INET de todos modos).

    
respondido por el Gilles 25.04.2016 - 01:34
fuente
1

Las funciones en desuso están generalmente etiquetadas por analizadores de código estático simplemente porque están en desuso. (Eso suele ser una configuración opcional). Muchos estándares de codificación segura específicamente dicen: "no usar funciones en desuso".

Aparte de algunos errores solucionados hace mucho tiempo, gethostbyname no es terrible, pero eso no es razón para usarlo en un nuevo código cuando existe una alternativa compatible.

    
respondido por el John Deters 23.04.2016 - 23:21
fuente

Lea otras preguntas en las etiquetas