【问题标题】:Update aspnet membership password answer更新aspnet会员密码答案
【发布时间】:2012-05-02 00:59:50
【问题描述】:

我将在 aspnet_Membership 中更新安全问题和答案。通常是通过代码来完成的:

 user.ChangePasswordQuestionAndAnswer(password, question, answer);

但我不知道密码。我发现有一个默认的存储过程。存储过程是:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[aspnet_Membership_ChangePasswordQuestionAndAnswer]
    @ApplicationName       nvarchar(256),
    @UserName              nvarchar(256),
    @NewPasswordQuestion   nvarchar(256),
    @NewPasswordAnswer     nvarchar(128)
AS
BEGIN
   DECLARE @UserId uniqueidentifier
   SELECT  @UserId = NULL
   SELECT  @UserId = u.UserId
   FROM    dbo.aspnet_Membership m, dbo.aspnet_Users u, dbo.aspnet_Applications a
   WHERE   LoweredUserName = LOWER(@UserName) AND
        u.ApplicationId = a.ApplicationId  AND
        LOWER(@ApplicationName) = a.LoweredApplicationName AND
        u.UserId = m.UserId
   IF (@UserId IS NULL)
   BEGIN
      RETURN(1)
   END

   UPDATE dbo.aspnet_Membership
     SET    PasswordQuestion = @NewPasswordQuestion, PasswordAnswer = @NewPasswordAnswer
    WHERE  UserId=@UserId
   RETURN(0)
   END

但是我刚刚发现答案是明文。如何使用存储过程并对其进行哈希处理?

谢谢。

【问题讨论】:

标签: c# asp.net security hash asp.net-membership


【解决方案1】:

如果您有权访问该用户,则可以在使用 Membership 方法之前更改其密码:

public virtual bool ChangePassword(string oldPassword, string newPassword)

你可以试试

string newPassword = user.ResetPassword();
user.ChangePassword(newPassword, "SOMENEWPASSWORD");

那就做吧

user.ChangePasswordQuestionAndAnswer("SOMENEWPASSWORD", question, answer);   

【讨论】:

  • 困难的部分是我们必须重置用户的密码。但用户可能不想这样做。我想避免它。
  • 用户密码是否存储为哈希?
  • 我想是的。在 web.config 中:
  • 如果他们被散列,在不知道他们的密码的情况下会很困难。是否可以让用户创建和更新他们的安全问题和答案,同时重置他们自己的密码?
  • YS的方法HASHBYTES好吗?我试过了,但它与SHA1哈希方法不匹配。
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2015-11-11
  • 2014-08-12
  • 2011-02-10
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多