Earlier in this series I introduced the config file, but I didn’t say much about it other that show an example. In this post I’ll go in to more detail.
Defining the config section
To define the section:
<configSections>
<!-- Set up other config sections here—>
<sectionGroup name="passwordValidation">
<section name="rules" type="Xander.PasswordValidator.Config.PasswordValidationSection, Xander.PasswordValidator, Version=0.1.0.0, Culture=neutral, PublicKeyToken=fe72000dffcf195f" allowLocation="true" allowDefinition="Everywhere"/>
</sectionGroup> </configSections>
This defines the configuration section will will appear later in the config file.
An example of the config section itself:
<!-- The configuration section that describes the configuration for the password validation --> <passwordValidation>
<rules minimumPasswordLength="6" needsNumber="false" needsLetter="false" needsSymbol="false">
<wordListProcessOptions checkForNumberSuffix="true" checkForDoubledUpWord="true" checkForReversedWord="true" />
<standardWordLists>
<add value="FemaleNames"/>
<add value="MaleNames"/>
<add value="MostCommon500Passwords"/>
<add value="Surnames"/>
</standardWordLists>
<customWordLists>
<add file="WordLists/MyCustomWordList.txt" />
<add file="WordLists/MyOtherCustomWordList.txt" />
</customWordLists>
</rules> </passwordValidation>
The rules
The rules section defines the actual rules by which the passwords will be validated.
<rules minimumPasswordLength="13" needsNumber="true" needsLetter="true" needsSymbol="true">
- minimumPasswordLength: a positive integer that defines the minimum number of characters needed for a valid password. It is optional and if missing will default to 8.
- needsNumber: Boolean that indicates whether the password needs a number in it. It is optional and if missing will default to true.
- needsLetter: Boolean that indicates whether the password needs a letter in it. It is optional and if missing will default to true.
- needsSymbol: Boolean that indicates whether the password needs a symbol in it. It is optional and if missing will default to false.
Rules can have a number of child elements also.
- wordListProcessOptions: A set of options for how the word lists are processed
- standardWordLists: A collection of built in word lists to use to check the password against.
- customWordLists: A collection of custom word lists to use to check the password against.
The word list process options
By default, checking the password against the word lists only checks to see if the password is in a word list. These are additional options for checking against the word lists.
<wordListProcessOptions checkForNumberSuffix="true" checkForDoubledUpWord="true" checkForReversedWord="true" />
- checkForNumberSuffix: Indicates whether the password should be checked to see if it is simply in the word list with an additional digit appended. This is optional, and by default is false.
- checkForDoubledUpWord: Indicates whether the password should be checked to see if it is the same sequence repeated over again, and if it is to see if the first half is in the word list. This is optional and the default value is false.
- checkForReversedWord: Indicates the a reversed form of the password should be checked to see if it in the word list. This is optional and the default value is false.
Standard word lists
This element is a container for a collection of standard word list items.
<standardwordlists> <add value="FemaleNames" /> <add value="MaleNames" /> <add value="MostCommon500Passwords" /> <add value="Surnames" /> </standardwordlists>
The valid words list are:
Custom word lists
This element is a container for a collection of file paths to plain text files that contain custom word lists to check against. A word list file is simply a plain text file with one word per line.
<customWordLists> <add file="WordLists/MyCustomWordList.txt" /> <add file="WordLists/MyOtherCustomWordList.txt" /> </customWordLists>
The paths are relative to the working directory of the application in which the password validator is operating. In an ASP.NET web application the paths should be prefixed with the ~ to ensure they are correctly mapped on the server relative to the root of the web application.