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

ASP.NET - 使用 jQuery 和 XML 的新密码强度指示器 v2.0

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (5投票s)

2015 年 12 月 27 日

CPOL

7分钟阅读

viewsIcon

25125

downloadIcon

175

ASP.NET 密码强度指示器/检查器版本 2.0 类似于 AJAX PasswordStrength 扩展控件的行为,通过利用 jQuery 和 XML 实现。

Password Strength indicator

目录

引言

最近,我有机会审查了初始插件并进行了一些修改。请随意下载和探索源代码。

该插件的目的是帮助用户选择一个强密码。我想强调的是,该插件只能做到以下几点:

  • 检查密码是否包含 x 个大写字符 (A-Z)
  • 检查密码是否包含任何小写字符 (a-z)
  • 检查密码是否包含 x 个十进制数字 (0-9)
  • 检查密码是否包含 x 个允许的字母数字字符
  • 检查密码是否满足最小和最大密码长度要求
  • 检查密码是否超出了允许的最大连续重复字符数

如果您想添加以下功能,则需要编写额外的代码/逻辑:

  • 防止明显的键盘序列(例如,123456、qwerty 等)
  • 防止用户使用之前的 x 个历史密码
  • 密码最大年龄
  • 防止用户输入常用字符(例如,Apple、Chicken 等)
  • 等等…

2.0 版本新增内容?

  • MVC4、MVC3、ASP.NET Web 应用程序/项目和经典 ASP 的示例代码包含在一个解决方案中
  • 新的属性用于指定连续重复字符的最大数量 (maxConsecutiveRepeatedChars)
  • passwordpolicy.xml 文件可以使用 jQuery BlockUI 插件在新窗口或模态窗口中显示
  • 插件接受 xmlFileLocation 和 passwordPolicyLinkId 选项
  • 次要更改

项目解决方案中包含什么?

请参阅图 1。示例代码包含一个网站、Web 项目、MVC3 和 MVC4 Web 应用程序,它们都使用了该插件。

注意:在大多数项目中,演示不在主页上。以下是以下项目的演示位置:

PasswordStrengthIndicator.Test.Web

  • 在 Default.aspx 页面上

PasswordStrengthIndicator.Test.MVC3

  • 在主视图上,页面内容和页面右上角应该有一个“注册”链接。单击链接可导航到“创建新帐户”页面

PasswordStrengthIndicator.Test.MVC4/PasswordStrengthIndicator.Test.WebApp

  • 在主视图或其他视图上,页面右上角应该有一个“注册”链接。单击链接可导航到“创建新帐户”页面。

图 1

project

PasswordStrengthIndicator.Core

Helper 类库中有两个方法,分别是 *GetPasswordSetting()* 和 *IsPasswordMeetPolicy(string strPassword)*。*GetPasswordSetting* 从 XML 文件读取所有密码策略属性。*IsPasswordMeetPolicy* 方法创建正则表达式并验证密码是否符合密码策略。您可以在此类中添加额外的逻辑来检查明显的键盘序列、密码最大年龄等...

如何集成到您的应用程序中

首先,将 *PasswordPolicy.xml*、*PasswordPolicy.xslt* 和 *jquery.password-strength.js* 文件复制到您的应用程序中。确保 PasswordPolicy .xml 和 .xslt 文件位于同一位置。XSL 用于将 XML 文档转换为 HTML。假设这两个文件都已复制到“XmlDoc”文件夹中。然后,在 web.config 文件的应用程序设置下定义一个新键 *passwordPolicyXMLLocation*。请参阅图 2。*PasswordStrengthIndicator.Core* 库将根据该键获取 XML 文件位置的路径。

图 2

app setting

可以在 *PasswordPolicy.xml* 文件中自定义密码属性规则,以符合您组织的规范。*maxConsecutiveRepeatedChars* 是 2.0 版本中的一个新属性。如前所述,此新属性用于控制密码中连续重复字符的最大数量。默认值为 0,对密码中连续字符重复的频率没有限制。我建议将其设置为 1,这样它还可以捕获重复的字符串,例如“T3chT3ch”或“NinjaNinja”。

之后,将 *PasswordStrengthIndicator.Core* 库添加到 Web 应用程序/项目中。接下来,将插件脚本添加到 Web 应用程序中。根据项目类型,引用插件脚本 (*jquery.password-strength.js*) 的方式可能有所不同。列表 1 和列表 2 显示了 ASP.NET Web 应用程序和 MVC 应用程序的示例标记代码。blockUI 插件是可选的,没有它,密码策略弹出窗口将在新窗口中打开,而不是以模态对话框的形式。

列表 1

 <asp:Label runat="server" ID="lblPassword"
            AssociatedControlID="txtPassword">Enter Password:</asp:Label>
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
<a id="passwordPolicy" href="#">Password policy</a>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />

<script src="Script/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="Script/jquery.password-strength.js" type="text/javascript"></script>
<script src="Script/jquery.blockUI.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function () {
            var myPlugin = $("#<%=txtPassword.ClientID%>").password_strength({
                appFolderXMLPath: "<%= Page.ResolveUrl(@"~/") %>",
                passwordPolicyLinkId: 'passwordPolicy'
            });

            $("#<%=btnSubmit.ClientID%>").click(function () {
                return myPlugin.metReq(); //return true or false
            });
        });
</script>

列表 2

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jquery.password.strength")

    <script type="text/javascript">
        jQuery(document).ready(function () {
            var myPlugin = jQuery("input[id='Password']").password_strength({
                appFolderXMLPath: "@Url.Content("~/")XmlDoc/",
                passwordPolicyLinkId: 'passwordPolicy'
            });

            jQuery("[id='btnSubmit']").click(function () {
                return myPlugin.metReq(); //return true or false
            });
        });
   </script>
}

在之前的插件 (v1.0) 中,用户必须在 .aspx 页面和插件脚本中指定确切的 XML 文件位置。在版本 2.0 中,插件提供了一个选项,允许用户指定 XML 文件的路径。语法可能因应用程序框架而异。在这种情况下,*Page.ResolveUrl* 或 *Url.Content* 方法的目的是帮助查找 Web 应用程序的根路径。这在跨环境迁移时非常有用。例如,假设本地开发环境中的虚拟路径设置为“/”,并且 XML 和 XSLT 文件都位于应用程序根目录下。在 .aspx 页面中,我们指定 *appFolderXMLPath*:“/”。在这种情况下,插件将在应用程序根目录下查找 *PasswordPolicy.xml* 文件,一切都会正常工作。如果应用程序的虚拟路径在开发服务器上设置为“/MyApp_Dev”怎么办?插件在这种情况下将不起作用,因为它在“/”下找不到 xml 文件。如果我们硬编码路径,然后在每个环境都要修改它,那将很麻烦。

插件还有一个选项,允许用户指定密码策略链接 ID。当用户单击锚链接时,新窗口将在此处出现并以 HTML 格式显示 XML 文件内容。以前,锚单击事件在 .aspx 页面上,现在它已在插件脚本中挂钩。

列表 3 显示了如何在服务器端调用辅助方法来验证密码强度的示例。

列表 3

 void btnSubmit_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(txtPassword.Text) && PasswordStrengthIndicator.Core.Helper.IsPasswordMeetPolicy(txtPassword.Text))
        {
            ResultLabel.Text = "Password meet password policy!";
        }
        else
        {
            ResultLabel.Text = "Password does not meet password policy!";
        }
    }

正则表达式

列表 4 显示了插件根据 *PasswordPolicy.xml* 文件中的设置生成的正则表达式,用于验证密码。您可以在 regexlib.com 上进行测试;确保取消选中“不区分大小写”复选框。如果结果显示为“无结果”,则表示密码不满足正则表达式。

列表 4

(?=^.{12,25}$)(?=(?:.*?\d){2})(?=.*[a-z])(?=(?:.*?[A-Z]){1})(?=(?:.*?[!@#\\$%*()_+^&}{:;?.]){1})(?!.*\s)^(?i:(?!([0-9a-zA-Z!@#\\$%*()_+^&}{:;?.]+)\1{1,}).)*$

表 1 显示了列表 4 中正则表达式的细分以及简要说明。

表 1

正则表达式组 描述
(?=^.{12,25}$) 密码长度:最小12,最大25
(?=(?:.*?\d){2}) 至少2number
(?=.*[a-z]) 至少一个小写字符
(?=(?:.*?[A-Z]){1}) 至少1大写字符
(?=(?:.*?[!@#\\$%*()_+^&}{:;?.]){1}) 至少1[…] 中列出的特殊字符
(?!.*\s) 无空格
^(?i: (?!([0-9a-zA-Z!@#\\$%*()_+^&}{:;?.]+)\1{1,}).) 启用不区分大小写匹配,密码中的字符串或字符不得重复超过1时间

结论

我希望有人能发现这些信息有用,并让您的编程工作更轻松。如果您发现任何错误、不同意内容或想帮助改进本文,请给我发消息,我会与您一起纠正。我建议下载演示并进行探索,以便完全掌握概念,因为我可能会错过本文中的一些重要信息。如果您想帮助改进本文,请给我发电子邮件。

测试于:Internet Explorer 11,10,9.0, Firefox 43, Google Chrome 25.0 和 Apple Safari 5.1.7
IE, Firefox, Google Chrome, Safari

历史

2015 年 12 月 26 日 - 初始版本

观看此脚本的实际演示

http://download.ysatech.com/ASP-NET-jQuery-Password-Strength-v2/

下载

PasswordStrengthIndicator_v2.zip (外部链接)

资源

ASP.NET - 使用 jQuery 和 XML 的密码强度指示器
密码必须满足复杂性要求

© . All rights reserved.