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






4.86/5 (5投票s)
ASP.NET 密码强度指示器/检查器版本 2.0 类似于 AJAX PasswordStrength 扩展控件的行为,通过利用 jQuery 和 XML 实现。
目录
- 引言
- 2.0 版本新增内容?
- 项目解决方案中包含什么?
- PasswordStrengthIndicator.Core
- 如何集成到您的应用程序中
- 正则表达式
- 结论
- 历史
- 观看此脚本的实际演示
- 下载
- 资源
引言
最近,我有机会审查了初始插件并进行了一些修改。请随意下载和探索源代码。
该插件的目的是帮助用户选择一个强密码。我想强调的是,该插件只能做到以下几点:
- 检查密码是否包含 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
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
可以在 *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
历史
2015 年 12 月 26 日 - 初始版本
观看此脚本的实际演示
http://download.ysatech.com/ASP-NET-jQuery-Password-Strength-v2/
下载
PasswordStrengthIndicator_v2.zip (外部链接)