c# asp.net-mvc passwords webmatrix salt

c# - WebMatrix WebSecurity PasswordSalt



asp.net-mvc (2)

Estoy usando WebMatrix y he creado un sitio web basado en "StarterSite". En este sitio de inicio, obtiene un buen diseño básico, que incluye registro, inicio de sesión, páginas de contraseña olvidadas, etc.

He notado que en la base de datos que la tabla "webpages_Membership" tiene una columna llamada "PasswordSalt". Después de crear algunas cuentas de usuario nuevas, esta columna siempre permanece en blanco. Por lo tanto, asumo que no se está utilizando ninguna contraseña salt (ni siquiera una predeterminada).

Obviamente, esta no es la mejor práctica, sin embargo, parece que no puedo encontrar ninguna documentación que me indique cómo establecer o administrar el salt de contraseñas.

¿Cómo puedo configurar la sal de contraseña con WebSecurity Helper?


A partir de la versión RTM de WebMatrix / ASP.NET Web Pages, la característica / columna de sal no se utiliza.

Si abre la fuente de páginas web, verá las clases de db llenas de referencias como

INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt

...

VALUES (uid, hashedPassword,String.Empty /* salt column is unused */

acortado para enfatizar

Definitivamente hay maneras de anular e implementar este comportamiento, primero siendo:

  • anular System.WebData.SimpleMembershipProvider.CreateAccount ()

o

  • amplíe con System.WebData.SimpleMembershipProvider.CreateAccountWithPasswordSalt ()

Sin embargo, no voy a entrar en detalles a menos que lo solicite, ya que su uso de WebMatrix y una plantilla sugiere que probablemente no quiera meterse con la reescritura de una tonelada de su propio código C # / ASP para este proyecto.


La respuesta anterior da la impresión de que no se aplica salting cuando se utiliza WebSecurity SimpleMembershipProvider .

Eso no es verdad. De hecho, el campo de sal de la base de datos no se usa, sin embargo, esto no indica que no se genere sal al aplicar la contraseña.

En WebSecurity s SimpleMembershipProvider se utiliza algo SimpleMembershipProvider , la sal aleatoria es generada por StaticRandomNumberGenerator y se almacena en el campo de la contraseña con el hash:

byte[] outputBytes = new byte[1 + SALT_SIZE + PBKDF2_SUBKEY_LENGTH]; Buffer.BlockCopy(salt, 0, outputBytes, 1, SALT_SIZE); Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SALT_SIZE, PBKDF2_SUBKEY_LENGTH); return Convert.ToBase64String(outputBytes);