SecureString va de alguna manera para asegurar la instancia en la memoria de una cadena, sin embargo, debe tener en cuenta algunos inconvenientes importantes.
- Un SecureString (al igual que svick señala) puede ser recuperada sin una clave de descifrado, por lo que cualquier hacker lo suficientemente capacitado para recuperar este trozo de memoria que puede asumir con seguridad puede realizar fácilmente esta operación menor para recuperar la cadena de texto sin formato . Tenga en cuenta la simplicidad de
SecureStringToBSTR(input);
SecureString debe rellenarse en carácter por carácter, ya que no hay ninguna propiedad .Text Obtiene o establece el acceso de acceso a usar. Incluyendo en los blogs de MSDN que a menudo se ve código como el siguiente:
public static SecureString StringToSecureString(string input)
{
SecureString output = new SecureString();
int l = input.Length;
char[] s = input.ToCharArray(0, l);
foreach (char c in s)
{
output.AppendChar(c);
}
return output;
}
El problema significativo con este código es que el desarrollador permitió la cadena input
-vez existen en la memoria en el primer lugar.El control de usuario o WinForm cuadro de texto de PasswordBox utilizan para recoger esta contraseña del usuario nunca debe recoger toda la contraseña en una sola operación, como
- Los hackers pueden acceder a la memoria directamente y recuperar la contraseña directamente desde el control en la pila o Inyectar código para recuperar la contraseña en la instanciación de este método
- Si su último Volcado de memoria aún reside en su máquina desde su última pantalla azul, y este control se rellenó con su contraseña de texto plano, entonces la contraseña se encuentra en una pequeño archivo ordenado listo para que su pirata informático lo recoja y lo utilice en su tiempo libre.
Considere las opciones donde KeyPress se utiliza para recuperar cada carácter del usuario, de lo contrario, PasswordBox de WPF está respaldado por una SecureString por defecto, creo (alguien más puede confirmar esto).
Finalmente, existen formas mucho más simples de recopilar contraseñas de usuarios como Key Loggers. Mi recomendación es considerar su demografía de usuario, riesgo de exposición, y determinar si algo como trivial como SecureString realmente va a cortarlo.
* Nunca * almacene contraseñas, ni siquiera cifradas. Solo almacena su hash. –
@HansPassant buen consejo, pero esto suena como un administrador de contraseñas. Obviamente, un administrador de contraseñas no puede salirse con la suya almacenando solo hashes. –