Esiste un rischio per la sicurezza nell'uso di puntatori anziché istanze di struct?

2

Recentemente durante una revisione del codice, uno sviluppatore senior mi ha chiesto di sostituire un puntatore con istanza di struttura in un metodo di utilità. Mi ha chiesto di farlo per motivi di sicurezza. Una ragione per cui potevo pensare era che le istanze della struttura si sarebbero ripulite grazie allo stack di istruzioni, ma il valore del puntatore non lo avrebbe fatto. C'è qualche altra ragione? Un utente malintenzionato non potrebbe accedere alla mia memoria in nessuno dei due casi?

EDIT: Aggiunta dello snippet di codice:

static void make_digest( const EVP_MD *md, char *header, char *message,unsigned char *digest)
{
   EVP_MD_CTX *mdctx;
   unsigned int digest_len = 0;

   EVP_MD_CTX_init(mdctx);
   EVP_DigestInit_ex(mdctx, md, NULL);
   EVP_DigestUpdate(mdctx, header, strlen( header ));
   EVP_DigestUpdate(mdctx, message, 32);
   EVP_DigestFinal_ex(mdctx, digest, &digest_len);
   EVP_MD_CTX_cleanup(mdctx);
   return;
}
    
posta Limit 02.05.2016 - 03:39
fonte

1 risposta

5

Non conosco le specifiche della routine che ti è stato chiesto di modificare, ma posso dirti quanto segue.

Quando si assegna memoria all'heap, anche se la si disalloca correttamente, non è possibile garantire che il contenuto di tale memoria venga cancellato una volta terminato.

Nello stack si tratta dello stesso accordo, tuttavia a causa del modo in cui funziona lo stack, è più probabile che la memoria venga sovrascritta in ordine breve (diamine, la funzione successiva potrebbe sovrascriverla). Con la memoria allocata nell'heap, il tempo per essere sovrascritto è indeterminabile dalla tua prospettiva come programmatore.

Quindi per rispondere alla tua domanda - un utente malintenzionato potrebbe essere in grado di leggere la memoria in entrambe le istanze - ma durante l'esecuzione del programma, lo stack potrebbe essere sovrascritto immediatamente, mentre i dati nell'allocazione dell'heap sarebbero molto più facile da trovare molto tempo dopo che il tuo programma l'ha deallocato.

    
risposta data 02.05.2016 - 12:25
fonte

Leggi altre domande sui tag