使用JavaScript和正則表達式檢查密碼強度

使用JavaScript和正則表達式檢查密碼強度
閱讀時間: 2 分鐘

我正在做一些研究,以查找使用以下密碼強度檢查器的良好示例 JavaScript的正則表達式 (正則表達式)。 在我工作的應用程序中,我們進行了回發操作以驗證密碼強度,這對我們的用戶而言非常不便。

什麼是正則表達式?

正則表達式是定義搜索模式的一系列字符。 通常,字符串搜索算法會將此類模式用於 or 查找和替換 對字符串的操作,或用於輸入驗證。 

本文絕對不是要教您正則表達式。 只需知道使用正則表達式的功能將絕對簡化您在搜索文本模式時的開發。 還需要注意的是,大多數開發語言都優化了正則表達式的使用方式…因此,Regex通常比服務器和客戶端都快得多,而不是逐步解析和搜索字符串。

我在網上搜尋了很多之後才發現 一個例子 一些很好的正則表達式,它們查找長度,字符和符號的組合。 但是,對於我來說,該代碼有點過分了,並且是針對.NET量身定制的。 因此,我簡化了代碼並將其放入JavaScript。 這使得它可以在回發之前在客戶端的瀏覽器上實時驗證密碼強度……並向用戶提供有關密碼強度的一些反饋。

輸入一個密碼

每次敲擊鍵盤時,都會針對正則表達式對密碼進行測試,然後在其下方的跨度中向用戶提供反饋。




輸入密碼

這是代碼

正則表達式 在減少代碼長度方面做得非常出色:

  • 更多字符 –長度小於8個字符。
  • –如果長度小於10個字符,並且不包含符號,大寫字母和文本的組合。
  • –如果長度為10個字符或更多,並且包含符號,大寫字母和文本的組合。
  • 強大 - 如果長度為14個字符或更多,並且包含符號,大寫字母和文本的組合。

<script language="javascript">
    function passwordChanged() {
        var strength = document.getElementById('strength');
        var strongRegex = new RegExp("^(?=.{14,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
        var mediumRegex = new RegExp("^(?=.{10,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
        var enoughRegex = new RegExp("(?=.{8,}).*", "g");
        var pwd = document.getElementById("password");
        if (pwd.value.length == 0) {
            strength.innerHTML = 'Type Password';
        } else if (false == enoughRegex.test(pwd.value)) {
            strength.innerHTML = 'More Characters';
        } else if (strongRegex.test(pwd.value)) {
            strength.innerHTML = '<span style="color:green">Strong!</span>';
        } else if (mediumRegex.test(pwd.value)) {
            strength.innerHTML = '<span style="color:orange">Medium!</span>';
        } else {
            strength.innerHTML = '<span style="color:red">Weak!</span>';
        }
    }
</script>
<input name="password" id="password" type="text" size="15" maxlength="100" onkeyup="return passwordChanged();" />
<span id="strength">Type Password</span>

強化密碼請求

重要的是,您不僅要驗證Javascript中的密碼構造。 這將使擁有瀏覽器開發工具的任何人都可以繞過腳本並使用所需的任何密碼。 在將密碼存儲在平台​​中之前,您應該始終利用服務器端檢查來驗證密碼強度。

29 個評論

  1. 1
  2. 2

    謝謝! 謝謝! 謝謝! 我一直在鬼混兩個星期,從其他網站獲得該死的密碼強度代碼,然後拔頭髮。 您的簡短,可以像我想要的那樣工作,最重要的是,JavaScript新手可以輕鬆修改! 我想捕獲強度判定,除非滿足強度測試,否則不要讓表單發布實際更新用戶的密碼。 其他人的代碼太複雜,或者工作不正常或其他原因。 我愛你! XXXXX

  3. 4

    感謝上帝,他們實際上可以正確地編寫一段代碼。
    有和賈尼斯一樣的經歷。

    開箱即用,非常適合像我這樣無法編寫javascript代碼的人!

  4. 5
  5. 6
  6. 7
  7. 8
  8. 9
  9. 10
  10. 11

    “ P @ s $ w0rD”表現強勁,儘管它會因字典攻擊而很快被破解……
    為了在職業解決方案上部署這樣的功能,我相信將這種算法與字典檢查結合起來很重要。

  11. 12
  12. 13
  13. 14
  14. 15
  15. 16
  16. 17
  17. 18
  18. 19

    有人可以告訴我,為什麼它不能正常工作。

    我複制了所有代碼,並將其粘貼到notepad ++,但根本不起作用?
    請幫助我..

  19. 20
  20. 21
  21. 22
  22. 23
  23. 24

    這種“強度檢查器”使人們走上了非常危險的道路。 它在整個密碼短語長度上重視字符多樣性,從而使它對較短,更多樣化的密碼的評價要強於較長,不那麼多樣化的密碼。 如果用戶遇到嚴重的黑客威脅,這將使您的用戶陷入困境。

    • 25

      我不同意,喬丹! 該示例只是作為腳本示例發布的。 我對人們的建議是利用密碼管理工具為它唯一的任何網站創建獨立的密碼短語。 謝謝!

  24. 26
  25. 27
  26. 28
  27. 29

你覺得呢?

本網站使用Akismet來減少垃圾郵件。 了解您的評論如何處理.