簡體   English   中英

如何在asp.net中檢查密碼強度?

[英]How to check password strenth in asp.net?

我想檢查用戶在注冊過程中輸入的密碼強度。 我必須為此做一些正則表達式。 任何見解。

為什么不在Ajax控件工具箱中使用PasswodStrength控件

PasswordStrength是一個ASP.NET AJAX擴展程序,可以附加到用於輸入密碼的ASP.NET TextBox控件上。 PasswordStrength擴展程序在TextBox中顯示密碼的強度,並在用戶鍵入密碼時自動更新。 該指示器可以將密碼的強度顯示為文本消息或帶有進度條指示器。 ....

我正在使用此( http://blog.stevenlevithan.com/archives/javascript-password-validator )腳本進行密碼驗證。

我已經將此腳本擴展到了Extender控件:

    [TargetControlType(typeof(ITextControl))]
    public class PasswordValidatorExtender : ExtenderControl
    {
        public PasswordValidatorExtender()
        {
        }

        public int MinPasswordLength
        {
            get { return (int?)ViewState["MinPasswordLength"] ?? 0; }
            set { ViewState["MinPasswordLength"] = value; }
        }

        protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors(Control targetControl)
        {
            ScriptControlDescriptor desc = new ScriptControlDescriptor("MyNamespace.PasswordValidator", targetControl.ClientID);
            desc.AddProperty("MinPasswordLength", MinPasswordLength);
            yield return desc;
        }

        protected override IEnumerable<ScriptReference> GetScriptReferences()
        {
            string url = Page.ResolveUrl("~/scripts/PasswordValidator.js");
            yield return new ScriptReference(url);
        }
    }


/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("MyNamespace");

MyNamespace.PasswordValidator = function(element) {
    this._minPasswordLength;

    this._onTextChangedHandler;

    MyNamespace.PasswordValidator.initializeBase(this, [element]);
}

MyNamespace.PasswordValidator.prototype = {
    initialize: function() {
        MyNamespace.PasswordValidator.callBaseMethod(this, 'initialize');

        var element = this.get_element();
        this._onTextChangedHandler = Function.createDelegate(this, this._onTextChanged);
        $addHandler(element, "change", this._onTextChangedHandler);
        $addHandler(element, "keyup", this._onTextChangedHandler);
    },
    dispose: function() {        
        //Benutzerdefinierte Löschaktionen hier einfügen
        MyNamespace.PasswordValidator.callBaseMethod(this, 'dispose');
    },
    // Properties
    get_MinPasswordLength: function() {
        return this._minPasswordLength;
    },
    set_MinPasswordLength: function(val) {
        this._minPasswordLength = val;
    },
    // Events
    _onTextChanged: function(e) {
        var element = this.get_element();
        var txt = e.target.value;        
        element.removeAttribute('style');
        var style = '';
        if (this.validatePassword(txt, { length: [this._minPasswordLength, Infinity], numeric: 1, special: 1, upper: 1 }))
        {
            style = 'PasswordValidator_Best';
        }
        else if (this.validatePassword(txt, { length: [this._minPasswordLength, Infinity], numeric: 1, upper: 1 }))
        {
            style = 'PasswordValidator_Good';
        }
        else
        {
            style = 'PasswordValidator_Weak';
        }

        removeCSSClass(element, 'PasswordValidator_Weak');
        removeCSSClass(element, 'PasswordValidator_Good');
        removeCSSClass(element, 'PasswordValidator_Best');

        if(style != '')
        {
            Sys.UI.DomElement.addCssClass(element, style);
        }
    },
    // http://blog.stevenlevithan.com/archives/javascript-password-validator
    /*
    Password Validator 0.1
    (c) 2007 Steven Levithan <stevenlevithan.com>
    MIT License
    */
    validatePassword: function (pw, options) {
        // default options (allows any password)
        var o = {
            lower:    0,
            upper:    0,
            alpha:    0, /* lower + upper */
            numeric:  0,
            special:  0,
            length:   [0, Infinity],
            custom:   [ /* regexes and/or functions */ ],
            badWords: [],
            badSequenceLength: 0,
            noQwertySequences: false,
            noSequential:      false
        };

        for (var property in options)
            o[property] = options[property];

        var re = {
                lower:   /[a-z]/g,
                upper:   /[A-Z]/g,
                alpha:   /[A-Z]/gi,
                numeric: /[0-9]/g,
                special: /[\W_]/g
            },
            rule, i;

        // enforce min/max length
        if (pw.length < o.length[0] || pw.length > o.length[1])
            return false;

        // enforce lower/upper/alpha/numeric/special rules
        for (rule in re) {
            if ((pw.match(re[rule]) || []).length < o[rule])
                return false;
        }

        // enforce word ban (case insensitive)
        for (i = 0; i < o.badWords.length; i++) {
            if (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1)
                return false;
        }

        // enforce the no sequential, identical characters rule
        if (o.noSequential && /([\S\s])\1/.test(pw))
            return false;

        // enforce alphanumeric/qwerty sequence ban rules
        if (o.badSequenceLength) {
            var lower   = "abcdefghijklmnopqrstuvwxyz",
                upper   = lower.toUpperCase(),
                numbers = "0123456789",
                qwerty  = "qwertyuiopasdfghjklzxcvbnm",
                start   = o.badSequenceLength - 1,
                seq     = "_" + pw.slice(0, start);
            for (i = start; i < pw.length; i++) {
                seq = seq.slice(1) + pw.charAt(i);
                if (
                    lower.indexOf(seq)   > -1 ||
                    upper.indexOf(seq)   > -1 ||
                    numbers.indexOf(seq) > -1 ||
                    (o.noQwertySequences && qwerty.indexOf(seq) > -1)
                ) {
                    return false;
                }
            }
        }

        // enforce custom regex/function rules
        for (i = 0; i < o.custom.length; i++) {
            rule = o.custom[i];
            if (rule instanceof RegExp) {
                if (!rule.test(pw))
                    return false;
            } else if (rule instanceof Function) {
                if (!rule(pw))
                    return false;
            }
        }

        // great success!
        return true;
    }
}
MyNamespace.PasswordValidator.registerClass('MyNamespace.PasswordValidator', Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM