密码维护控件分为两部分,分别是密码修复控件PasswordRecovery和密码修改控件ChangePassword。
密码修复控件用来实现用户密码的重置和覆盖,在密码的重置过程中通过秘密问答的方式核对用户权限。该控件在实际使用过程中往往被很多开发人员误解,导致明文形式存储密码,这是非常不安全的。
正确的做法是,利用ASP.NET不可逆的加密方案对密码进行哈希处理,然后将新密码发送给用户。如果成员资格的授予程序经过配置,则可以对密码进行加密存储并发送。
若要使密码方案正确运行,应用程序应提供用户发送电子邮件的功能,可以使用SMTP服务器的名称对应用程序进行配置。
这里通过一个实例说明密码修复控件该如何使用。假设匿名用户访问密码修复页RecoverPassword.aspx,在输入新密码后显示成功画面,运行效果如图3-2所示。
图3-2 密码修复控件运行效果
在代码实例中定义了用户锁定事件_UserLookupError和初始化事件_Load,它们提供不同情况下要显示的提示信息。
如果需要将修复的密码通过电子邮件的形式发送给用户,必须设置控件的邮件配置节<mailSettings>。该模块用来设置往来邮件的地址和发送服务器地址。
对于用户输入正确的情况,密码修复控件调用成功模板<successtemplate>。
具体实现代码如下:
出于对系统安全的考虑,开发人员通常都会设计密码修改功能,但容易忽略很多细节,例如,敏感数据的过滤、注入符号的替换等。
通过ChangePassword控件,用户可以修改自己的密码:先提供原始密码,然后再创建并确认新密码。如果原始密码正确,则用户密码将更改为新密码。该控件支持邮件发送新密码。
如果用户未通过身份验证,该控件将跳回到用户登录页面。如果用户已通过身份验证,该控件将以用户的登录名填充文本框,运行效果如图3-3所示。
密码修改过程面临的最大安全问题就是密码信息的处理,下面的实例将演示如何配置控件的数据限制功能。实例演示设置了NewPasswordRegularExpression属性,定义检查密码的正则表达式,确保密码满足4个条件:
图3-3 密码修改控件
(1)多于6个字符。
(2)至少包含一个数字。
(3)至少包含一个特殊字符(非字母、数字或字符)。
(4)PasswordHintText属性中包含的密码要求会显示给用户。
假如用户输入的密码不符合NewPasswordRegularExpression属性的要求,则向用户显示NewPasswordRegularExpressionErrorMessage属性中包含的文本。如果用户未输入新密码,则向用户显示NewPasswordRequiredErrorMessage属性中包含的文本。
HTML代码如下: