2017-01-11 2 views
2

Wie kann ich die (Speicher-) Exposition einer unverschlüsselten Zeichenfolge beschränken, die in einer Datenbank gespeichert ist, wenn sie von der Datenbank an eine lokale Variable SecureString übertragen wird?Konvertieren einer Zeichenfolge aus der Datenbank in SecureString

Ist die Zeichenkette, nachdem sie von der Datenbank kommt, aber bevor sie konvertiert wird, genauso verwundbar, als wenn sie nur in eine Zeichenkettenvariable verschoben und dann konvertiert wird? Und gibt es einen anderen Weg, dies zu tun?

Hier ist Code Abrufen von Daten aus MSSQL-Datenbank, wo es als unverschlüsselte varchar gespeichert:

SecureString str = ((string)command.Parameters["@ssn"].Value).ConvertToSecureString(); 

Wo ConvertToSecureString() ist diese Erweiterung Methode:

public static SecureString ConvertToSecureString(this string str) 
{ 
    var secureStr = new SecureString(); 
    if (str.Length > 0) 
    { 
     foreach (var c in str.ToCharArray()) secureStr.AppendChar(c); 
    } 
    secureStr.MakeReadOnly(); 
    return secureStr; 
} 

Ich versuche, die belichten von abzuwenden Daten zu einigen Speicher-Profiling-Viren/Hacks/Dumps etc. Eg Walmart memory hack und sei so sicher wie möglich insgesamt.

Antwort

0

Wenn die Strings unverschlüsselt in der Datenbank gespeichert sind, sind sie trotzdem anfällig für Diebstahl.

Und wenn sie mit einem DataReader in den Speicher eingelesen werden, sind sie auch nur für kurze Zeit im Speicher unverschlüsselt, während Sie den Reader durchlaufen.

Mein Rat wäre, wenn die Strings so empfindlich sind, sie verschlüsselt in der DB zu speichern, lesen Sie die verschlüsselten Strings in SecureString mit einem DataReader, und entschlüsseln sie dann wie nötig; Dadurch werden sie nicht im Speicher verfügbar gemacht.

Verwandte Themen