密码强度指示器 NuGet 包






4.84/5 (11投票s)
使用 jQuery 和 XML + NuGet 包的密码强度指示器。
目录
- 引言
- PasswordPolicy.xml 文件包含什么?
- 检查键盘/字符序列的逻辑
- 如何创建 NuGet 包?
- web.config.install.xdt 和 web.config.uninstall.xdt 文件包含什么?
- 包设置
- 如何测试包然后发布?
- 如何发布包?
- 如何安装 PasswordStrengthIndicator NuGet 包?
- 如何安装 Password Strength Indicator 而不使用 NugGet 包管理器?新
- 结论
- 观看此脚本演示
- 下载
- 资源
- 历史
引言
最近,我得到了机会评审 ASP.NET - Password Strength Indicator using jQuery and XML 插件并对其进行了一些改进。以下是更改的摘要。
- 更新了插件以检查键盘/字符序列(例如,123456、qwerty、abcdef 等)
- 添加了使用 MVC5 的示例代码
- 将项目添加到 GitHub(https://github.com/bryiantan/PasswordStrengthIndicator)
- 已将插件添加到 NuGet(https://nuget.net.cn/packages/PasswordStrengthIndicator/)
- 修复了小 bug
如前一篇文章所述,该插件的目的是为用户选择强密码提供指导。我想重申一下,该插件在客户端和服务器端提供以下验证:
- 检查密码是否包含指定数量的必需大写字符(A-Z)
- 检查密码是否包含任何小写字符(a-z)
- 检查密码是否包含指定数量的必需十进制数字(0-9)
- 检查密码是否包含指定数量的必需允许的非字母数字字符(特殊字符,如:! @ # ...)
- 检查密码是否满足最小和最大密码长度要求
- 检查密码是否超过了允许的最大连续重复字符数
- 检查密码是否包含 XML 文件中指定的键盘字符序列
如果希望添加以下功能,您需要编写额外的代码/逻辑
- 阻止用户使用前 x 次历史密码
- 密码最大有效期
- 阻止用户输入常见字符(例如,Apple、Chicken 等)(我认为您可以将其包含在
keyboardSequenceCharacters
节点下,但这会过于庞大) - 等等。
在本文中,请允许我与大家分享以下内容:
- 评审 PasswordPolicy.xml 中的元素
- 评审检查键盘/字符序列的逻辑
- 如何创建和发布 NuGet 包
- 如何使用该包
PasswordPolicy.xml 文件包含什么?
表 1 显示了 XML 节点列表及其对应的描述
节点 | 描述 |
duration | 这只是一个示例。您可以向 XML 文件添加节点和值,然后将业务逻辑添加到 PasswordStrengthIndicator.Core 类中 |
minLength | 密码可接受的最小长度 |
maxLength | 密码可接受的最大长度 |
numsLength | 必需数字(0-9)的最小数量 |
upperLength | 必需大写字母(A-Z)的最小数量 |
specialLength | 必需特殊字符的最小数量 |
barWidth | 指定条形指示器的宽度 [示例:100, 200] |
barColor | 指定条形的最终颜色 [示例:黄色、栗色等] |
specialChars | 允许的有效特殊字符 |
useMultipleColors | 开启/关闭多种颜色 [红色、蓝色、绿色]。1=是,0=否 |
maxConsecutiveRepeatedChars | 0 = 允许重复,无验证。[示例:aaaaaaaaA 将是有效的] 1 及以上 = 指定给定字符连续重复的最大数量。示例
|
maxKeyboardSequence | 指定最大允许的键盘/字符序列。示例
keyboardSequenceCharacters 节点中定义)。 |
keyboardSequenceCharacters | 指定键盘/字符序列。根据您使用的键盘类型,节点名称可能有点误导。您可以在这里发挥创意,在一个 string 中指定任何您认为构成序列的内容。示例:abcdefghijklmnopqrstuvwxyzzyxwvuts ...123456 ...注意:不区分大小写 |
检查键盘/字符序列的逻辑
列表 1 和 2 分别显示了服务器端和客户端验证代码。首先,代码将从 PasswordPolicy.xml 文件中检索最大字符序列(MaxKeyboardSequence
)和序列字符(KeyboardSequenceCharacters
)。然后,它将遍历用户输入的密码字符串,以查找 string
的任何部分是否是 KeyboardSequenceCharacters
中定义的 string
的子集。
这里有一个例子。假设用户输入 Nin@Abc357,MaxKeyboardSequence
和 KeyboardSequenceCharacters
分别设置为 2 和 abcdefghijklmnopqrstuvwxyzzyxwvuts
。最初,逻辑将检查 KeyboardSequenceCharacters
是否包含 Nin。然后,它将检查是否包含 in@、n@A、@Ab、Abc 等。如果 KeyboardSequenceCharacters
设置为 3,则验证检查将从 Nin@、in@A、n@Ab 等开始。根据示例,输入的密码的一部分(Nin@Abc357)是 KeyboardSequenceCharacters
的子集。因此,用户将在客户端收到类似“不允许使用键盘序列字符…”的验证错误。如前所述,请随时在 KeyboardSequenceCharacters
值下输入任何您认为构成序列的字符串。
public static bool IsPasswordContainSequence
(string strPassword, PasswordSetting passwordSetting)
{
int startIndex = 0;
int num = 0;
int length = passwordSetting.MaxKeyboardSequence + 1;
string empty = string.Empty;
string str1 = passwordSetting.KeyboardSequenceCharacters;
while (num < strPassword.Length)
{
num = startIndex + length;
string str2 = strPassword.ToLower().Substring(startIndex, length);
if (str1.Contains(str2))
return true;
++startIndex;
}
return false;
}
this.getKeyboardSequenceChar = function (passwordVal) {
var maxQwertySequence = password_settings.maxKeyboardSequence + 1;
var keyboardSequenceCharacters =
password_settings.keyboardSequenceCharacters;
var num = 0;
var startIndex = 0;
if (passwordVal.length >= maxQwertySequence) {
while (num < passwordVal.length) {
num = startIndex + maxQwertySequence;
var lastXsubString =
passwordVal.substr(startIndex, maxQwertySequence);
if (keyboardSequenceCharacters.indexOf
(lastXsubString.toLowerCase()) >= 0) {
return lastXsubString;
}
startIndex++;
}
}
如何创建 NuGet 包?
第一步是从 http://nuproj.net/ 下载并安装 NuGet Package Project 扩展。
安装后,打开 Visual Studio IDE,导航到 **文件**、**新建**、**项目**,然后在已安装的模板中选择 **NuGet**。请参阅图 1。
在项目中添加两个文件夹,分别为 Content 和 lib。我们可以通过右键单击项目,选择 **添加**,然后选择 **新建文件夹** 来做到这一点。我将把 JavaScript、XML 文件和示例页面添加到 Content 文件夹中。Content 文件夹中的文件将在安装过程中添加到目标解决方案中。现在,我希望 PasswordStrengthIndicator.Core.dll 在安装过程中添加到目标引用中。为了做到这一点,我将把 PasswordStrengthIndicator.Core.dll 程序集添加到 lib 文件夹中。接下来,我将 web.config.install.xdt 和 web.config.uninstall.xdt 添加到 Content 文件夹中。这两个文件的目的是在包安装和卸载期间向 web.config appSettings
部分添加和删除一个键。此时,解决方案应该看起来像图 3。
web.config.install.xdt 和 web.config.uninstall.xdt 文件包含什么?
列表 3 和列表 4 分别显示了 web.config.install.xdt 和 web.config.uninstall.xdt 的内容。在包安装期间,NuGet 将检查 appSettings
元素是否存在,如果不存在,则插入该元素。然后,它将检查是否需要将 passwordPolicyXMLLocation
键插入到 web.config 文件中。为了避免复杂化,将在包卸载期间从 web.config 中删除 passwordPolicyXMLLocation
键,而不是整个 appSettings
元素。
<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings xdt:Transform="InsertIfMissing">
<add key="passwordPolicyXMLLocation" value="~/MyXML/PasswordPolicy.xml"
xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
</appSettings>
</configuration>
<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="passwordPolicyXMLLocation"
xdt:Transform="Remove" xdt:Locator="Match(key)" />
</appSettings>
</configuration>
包设置
右键单击项目并选择属性来更新包属性。在这里,您可以指定包 ID、包版本、项目 URL,提供包的摘要和描述、许可证 URL 等。包名称是包 ID 和包版本的组合。在此示例中,包名称将以 NuGetPackage1.1.0.0.nupkg
结尾。因此,每次更新包时,请不要忘记更新包版本。nuget.org 不允许您发布两次相同名称的包。您还可以使用 Readme.txt 文件包含有关包的更多信息。
如何测试包然后发布?
让我们开始打开一个当前的 Web 项目或创建一个新的 Web 项目。转到 **工具**、**NuGet 包管理器**、**包管理器设置**。单击 **包源**,添加(绿色加号),然后单击省略号(…)浏览到包位置。之后,单击 **更新** 按钮。有关示例,请参阅图 5。
现在,我们回到 **工具**、**NuGet 包管理器**、**管理解决方案的 NuGet 包**。将包源更改为图 5 中指定的名称,然后单击 **浏览**。选择包和项目,然后单击 **安装** 按钮。有关示例,请参阅图 6。
如何发布包?
一旦我们验证了包已成功安装/卸载,请导航到 https://nuget.net.cn,登录,如果您还没有帐户,请创建一个。单击 **上传包** 菜单项。然后单击浏览并导航到包位置。在本例中,包名称为 NuGetPackage1.1.0.0.nupkg
。按照屏幕上的说明完成此过程。
如何安装 PasswordStrengthIndicator NuGet 包?
从菜单中,单击 工具
、**NuGet 包管理器**、**管理解决方案的 NuGet 包**…。确保包源指向 nugget.org。单击 **浏览** 并搜索 PasswordStrengthIndicator
或 Bryian Tan。您应该会看到与图 7 类似的搜索结果。选择要安装此包的项目,然后单击 **安装** 按钮。
包成功安装后,readme.txt 将打开。您可以阅读它以了解有关插件的更多信息。您的项目解决方案中应包含以下项:
- MyXML 文件夹,其中包含 PasswordPolicy.xml 和 PasswordPolicy.xslt 文件
- PasswordStrengthIndicator.Example,其中包含 Default.aspx.txt 和 jQuery_Password_Strength_Indicator.htm 文件
- 在 Scripts 文件夹下,您应该会看到 jquery.password-strength-2.0.min.js 和 jquery.blockUI.js
- 项目应引用
PasswordStrengthIndicator.Core
passwordPolicyXMLLocation
键已被添加到 web.config 的appSettings
部分
要运行测试,请打开 jQuery_Password_Strength_Indicator.htm 文件并更新 jQuery 引用。将 Default.aspx.txt 重命名为 Default.aspx 并更新 jQuery 引用。
如何安装 Password Strength Indicator 而不使用 NugGet 包管理器
以下是将包安装到 ASP.NET 应用程序/项目或其他框架(如 Classic ASP/PHP 等)而不使用 NuGet Manager 的步骤:
- 下载并解压缩 NuGet 包
- 请注意,此插件需要 jQuery 1.3+
- 导航到 Content 文件夹,并将 MyXML、PasswordStrengthIndicator.Example 和 Scripts 文件夹复制到应用程序解决方案中
- 将以下键添加到 web.config 的
appSettings
(不适用于其他框架)
< key="passwordPolicyXMLLocation" value="~/MyXML/PasswordPolicy.xml" />
- 将引用 lib/PasswordStrengthIndicator.Core.dll 添加到项目中(不适用于其他框架)
- 对于其他应用程序框架,您需要编写自己的服务器端验证,请参阅
PasswordStrengthIndicator.Core
源代码。 - 同样,您可以从存储库下载源代码/示例代码并研究项目结构。
结论
我希望有人会发现这些信息有用,并让您的编程工作更轻松。如果您发现任何 bug、不同意内容或想帮助改进本文,请给我写信,我将与您一起进行更正。我建议您下载演示并进行探索,以便掌握完整概念,因为我可能在本文中遗漏了一些重要信息。如果您想帮助改进本文,请与我联系。请使用以下链接报告任何问题:https://github.com/bryiantan/PasswordStrengthIndicator/issues。
测试于:Internet Explorer 11,10,9.0, Firefox 50, Google Chrome 25.0 和 Apple Safari 5.1.7
观看此脚本演示
下载
- 下载包 (https://nuget.net.cn/packages/PasswordStrengthIndicator/)
- 下载源代码 (https://github.com/bryiantan/PasswordStrengthIndicator)
资源
- ASP.NET - 使用 jQuery 和 XML 的密码强度指示器
- https://blogs.msdn.microsoft.com/webdev/2013/10/24/how-to-use-xdt-in-nuget-examples-and-facts/
- http://nuproj.net/
- 本地测试 NuGet 包的分步指南
历史
- 2016 年 12 月 26 日 - 初始版本
- 2017 年 1 月 3 日 - 添加了“不使用 NugGet 包管理器安装 Nuget 包”
- 2017 年 1 月 11 日 - 更新了“不使用 NugGet 包管理器安装 Nuget 包”
- 2017 年 2 月 20 日 - 更新了内容/语言