Perchè gethosbyname () è tanto brutto quanto gets () in base alla progettazione?

3

So che gethosbyname() è obsoleto da molto tempo. Ma vedo che gli analizzatori statici riportano il suo utilizzo come non sicuro, e quando i software rimuovono il suo utilizzo, tendono ad essere per ragioni di sicurezza.

So che ci sono stati molti difetti di sicurezza trovati nelle implementazioni di recente (come ghost) , ma molte cose sembrano indicare che la funzione è anche viziata dal design ...

    
posta user2284570 23.04.2016 - 22:57
fonte

2 risposte

0

Non sono a conoscenza di un motivo di sicurezza diretto per evitare gethostbyname . Non è come gets che non può essere utilizzato senza rischiare un overflow del buffer tranne che in condizioni altamente controllate in cui l'applicazione conosce la dimensione massima possibile dell'input.

Un motivo per cui gethostbyname è deprecato è che non è thread-safe, perché scrive il suo output in un buffer condiviso. In un programma con multithreading, è necessario utilizzare gethostbyname_r (se disponibile) oppure i thread devono utilizzare un meccanismo di sincronizzazione in modo che solo un thread utilizzi il buffer condiviso alla volta. Se il programmatore non ne era a conoscenza, l'applicazione potrebbe presentare un bug che può essere attivato causando chiamate in thread diversi quasi alla stessa ora; questo potrebbe bypassare un passaggio di autenticazione, per esempio.

Un altro motivo per cui gethostbyname (e gethostbyname_r ) è deprecato è che non soddisfa bene IPv6. Non consente all'applicazione di scegliere quale forma di indirizzo desidera. La conseguenza più probabile è che l'applicazione potrebbe smettere di funzionare se si modificano alcune impostazioni relative a IPv6. Ciò potrebbe causare dati inutili o addirittura un overflow del buffer da qualche parte se l'applicazione riceve un indirizzo IPv6 quando si aspetta un indirizzo IPv4 e non controlla il campo h_addrtype del risultato (perché, nella mente del programmatore, lì era nient'altro che AF_INET comunque.

    
risposta data 25.04.2016 - 01:34
fonte
1

Le funzioni deprecate sono generalmente contrassegnate da analizzatori di codici statici semplicemente perché sono deprecate. (Di solito è un'impostazione facoltativa.) Molti standard di codifica sicuri specificano in particolare: "non utilizzare funzioni deprecate."

A parte alcuni bug risolti da tempo, gethostbyname non è terribile, ma non c'è ragione di usarlo nel nuovo codice quando esiste un'alternativa supportata.

    
risposta data 23.04.2016 - 23:21
fonte

Leggi altre domande sui tag