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).