2010-01-06 5 views
8

This MSND article sagt SecureZeroMemory() ist gut für Fälle, wenn sensible Daten im Speicher für eine Weile gespeichert werden sollte sicher so schnell wie möglich überschrieben werden, wenn nicht mehr benötigt wird. Antworten auf this SO question erklären, warum dies einen Unterschied machen kann.Gibt es einen Grund, SecureZeroMemory() anstelle von memset() oder ZeroMemory() zu verwenden, wenn Sicherheit kein Problem ist?

Jetzt ist es sinnvoll, SecureZeroMemory() für die Initialisierung nur jeden Speicherblock zu verwenden? Zum Beispiel in einem Projekt sehe ich Code wie folgt aus:

ICONINFO ii; 
::SecureZeroMemory(&ii, sizeof(ICONINFO)); 
if (::GetIconInfo(hIcon, &ii)) 
{ 
    //do stuff, then 
    //release bitmaps 
    if(ii.hbmMask) 
     ::DeleteObject(ii.hbmMask); 
    if(ii.hbmColor) 
     ::DeleteObject(ii.hbmColor); 
} 

warum SecureZeroMemory() verwenden hier statt ZeroMemory(), memset() oder Wert Initialisierung? Ich meine, wenn der Compiler entscheidet, dass die Initialisierung unnötig ist und sie optimieren will - warum würde ich das erzwingen? Gibt es einen Grund, SecureZeroMemory() hier zu verwenden?

Antwort

8

Es macht keinen Sinn, SecureZeroMemory zu verwenden, um eine Icon-Infostruktur zu initialisieren. Es kann nur Bytes im Stack-Frame überschreiben, die an anderer Stelle sicher gelöscht werden sollten. Dieses Pferd ist der Scheune bereits entkommen. Es ist nicht einmal sinnvoll, es überhaupt zu initialisieren, der Rückgabewert von GetIconInfo() sagt Ihnen, dass es initialisiert wurde.

SecureZeroMemory() macht nur Sinn nach Speicher wurde mit sicheren Daten gefüllt.

11

SecureZeroMemory ist nie optimiert von einem Compiler. Das ist wichtig, wenn Sie sich Gedanken über den zu reinigenden Inhalt Ihres Speichers machen müssen, sagen Sie, wenn er sehr sensible Benutzerinformationen enthält, z. Banking-Software, Passwörter, etc. Offensichtlich, wenn Sie sich über solche Dinge keine Sorgen machen müssen, können Sie jede andere Art der Reinigung von Speicherpuffern verwenden oder gar nicht putzen, wenn es nicht notwendig ist.

Verwandte Themen