2017-01-11 2 views
2

Comment limiter l'exposition (mémoire) d'une chaîne non cryptée stockée dans une base de données lors du transfert de la base de données vers une variable locale SecureString?Convertir une chaîne de la base de données en SecureString

Est-ce que la chaîne est arrivée à partir de la base de données, mais avant qu'elle ne soit convertie, est-elle aussi vulnérable que de la déplacer dans une variable de chaîne, puis de la convertir? Et y a-t-il un autre moyen de s'y prendre?

code est ici d'obtenir des données de base de données MSSQL où il est stocké comme varchar non crypté:

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

ConvertToSecureString() est cette méthode d'extension:

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; 
} 

J'essaie d'éviter l'exposé des données à certains virus de profilage de mémoire/hacks/dumps etc. Walmart memory hack et être aussi sûr que possible dans l'ensemble.

Répondre

0

Si les chaînes sont stockées non cryptées dans la base de données, elles sont quand même vulnérables au vol. Et si elles sont lues en mémoire à l'aide d'un DataReader, elles seront également en mémoire non cryptées, même si ce n'est que très peu de temps pendant que vous parcourez le lecteur. Mon conseil serait, si les chaînes sont si sensibles, de les stocker cryptées dans la base de données, lire les chaînes cryptées dans SecureString en utilisant un DataReader, puis les décrypter si nécessaire; cela ne les exposera pas en mémoire.