65.9K
CodeProject 正在变化。 阅读更多。
Home

PasswordSecurityMeter 自定义控件

2005年7月4日

3分钟阅读

viewsIcon

43130

downloadIcon

805

在本文中,我创建了一个 ASP.NET 自定义控件,它显示用户的密码强度。

Sample Image - 4.88 KB

引言

最近我在英国的 eBay 网站上注册时,发现了一个有趣的控件,它显示用户的密码强度。这个想法引起了我的兴趣,我决定创建一个简单的 ASP.NET 自定义控件来提供该功能。

背景

用户的密码是基本的安全问题之一。一方面,我们希望系统是安全的,这需要强密码,但另一方面,有些用户没有相关的知识,也不想记住复杂的密码。安全密码的简单解决方案是使用字母(大小写混合)、数字和特殊字符(如 #[]!$%^&*)。密码也必须具有适当的长度(至少 6 个字符,但更多更好)。知道了这些,我们可以简单地将弱密码 mariusz 更改为强密码 MariusZ#30。但是我们——开发人员——必须记住,我们的职责是向用户展示并帮助他们创建强密码。

控件

好的,让我们看看发生了什么……

首先——引擎。基本上,我们需要检查密码的长度(必须大于最小值,比如 6 个字符,但如果它至少具有推荐的长度 - 9 个字符,那就更好了)。接下来 - 我们验证密码不包含非法短语(例如公司名称或来自登录电子邮件的短语),或者连续或相同的字符。最后一个阶段是检查密码是否包含字母、数字和特殊字符。这在 CalculateSecurityLevel(参见第 329 行;PasswordSecurityMeter.cs 文件)过程以及呈现的 JavaScript 代码(参见第 162 行;PasswordSecurityMeter.cs 文件)中实现。

关于控件设计器的一些说明

正如您所看到的,我创建了控件的设计器(PasswordSecurityMeterDesigner 类)。设计器用于在设计时提供控件的呈现。在这种情况下,设计器提供简单的属性检查,并且当值设置不正确时,会呈现一条相应的消息。

设计器类应该派生自 ControlDesigner 类,并且应该实现 GetDesignTimeHtml 过程(参见第 17 行;PasswordSecurityMeterDesigner.cs 文件)。正如您所看到的,我正在检查属性 PasswordControlName 是否已设置,并且当渲染模式 Image 被选中时,属性 ImagesNamePattern 是否已设置。

要将设计器与控件一起使用,您必须为控件的类设置 Designer 属性(参见第 13 行;PasswordSecurityMeter.cs 文件)。

使用代码

我假设您知道如何在 Visual Studio .NET 中编译和安装自定义控件(如果不是,请阅读 MSDN 上的这篇 文章)。要使用该控件,只需将其拖到 Web 窗体中并设置属性 PasswordControlName - 这是保存用户密码的控件的名称。此外,您可以设置这些属性

  • MinPasswordLength – 密码最小长度
  • MaxPasswordLength – 密码最大长度
  • GoodPasswordLength – 这决定了良好密码应该有多少个字符。如果密码至少有这么多字符,则添加一个等级点。
  • EMailControlName – 用户可以指定电子邮件的控件的名称。这可以防止用户在密码中使用来自电子邮件地址的短语,而这些短语可能被用作登录名。
  • RenderMode - 选择渲染模式(作为 ImageTable)。
  • ImagesNamePattern – 当 RenderModeImage 时,您必须指定此属性。只需键入图像的名称模式,将 {0} 放在安全级别编号的位置,例如:images/blue_securityLevel{0}.gif。在此示例中,您在 images 目录中有六个图像(blue_securityLevel0.gifblue_securityLevel1.gif、…、blue_securityLevel5.gif)。

历史

  • 2005 年 6 月 30 日 - 过了一会儿(很长一段时间),我终于写了一篇文章。不知道为什么,但总是需要一段时间 :(
  • 2005 年 5 月 4 日 - 我编写了控件的代码,并决定写一篇文章。

待办事项

  • 实现一个属性,该属性将允许用户输入禁止词列表(如公司名称)。
  • 实现一个属性,该属性将允许用户设置呈现表的颜色。
  • 实现动态图像渲染。
  • 实现“提示 & 技巧”,这将帮助客户创建更强的密码。
© . All rights reserved.