Recentemente ho eseguito una revisione del codice di sicurezza per la mia azienda e utilizzando uno strumento denominato Fortify360. Identificherà molti problemi con il codice e descriverà i problemi. Un problema interessante che ha rilevato che non ho trovato altre informazioni è il seguente:Sicurezza Heap memoria: Garbage Collection stringa
"I dati sensibili (come le password) archiviati in memoria possono essere trapelati se sono memorizzati in un oggetto String gestito. non sono bloccati, quindi il garbage collector può riposizionare questi oggetti a piacimento e lasciare diverse copie in memoria.Questi oggetti non sono crittografati per impostazione predefinita, quindi chiunque possa leggere il processo 'memoria sarà in grado di vedere il contenuto. processo 'memoria viene trasferito su disco, il contenuto non crittografato della stringa verrà scritto in un file di scambio.Infine, dal momento che gli oggetti stringa sono immutabili, la rimozione del valore di una stringa dalla memoria può essere effettuata solo dal garbage collector CLR. Garbage Collector non è richiesto per l'esecuzione a meno che il CLR abbia poca memoria, quindi non c'è alcuna garanzia in merito a quando garbage collecti su avrà luogo. In caso di crash dell'applicazione, un dump di memoria dell'applicazione potrebbe rivelare dati sensibili."
Tutto questo ho capito di fare buon senso e nella mia ricerca del problema è abbastanza standard.
Il la domanda è: come risolvo il problema? Supponiamo che la classe o le classi che sono in questione non possano ereditare da iDisposable (app molto grande, e la classe è necessaria molto tempo dopo la stringa in questione). Esiste un modo alternativo di gestione manuale della memoria per smaltire una stringa specifica senza chiamare il garbage collector, GC.Collect() ??
Apprezzare l'aiuto in anticipo
Alex
L'OP ha esplicitamente detto che non può farlo. – Woot4Moo
No, non l'ha fatto. Ha detto che non è possibile rendere specifiche classi della sua app IDisposable, non che non possa * usare * altre classi di framework che sono IDisposable. – cdhowie
Non è il metodo Dispose() che lo rende sicuro. –