2009-11-28 76 views
1

使用登錄系統 - 客戶選擇密碼進行站點訪問的點。限制用戶密碼字符集

除了使用RegEx確保密碼足夠強大之外,通常在我們的系統上,所有將在數據庫中結束的數據都會針對注入進行檢查等,並在所有字段上強制執行合理的限制字符集。我並不想爲密碼設置一個特別限制的字符集,因爲我認爲這太過於控制它的安全性。

在密碼的情況下

不過,我會用鹽醃SHA-512散列反正它插入其中提出的問題了一把:

  • 是否有任何一點在任何限制的字符設置客戶可以在密碼中使用 - 也就是說,我是否暴露了任何我認爲會被哈希完全繞過的注入之外的漏洞?

  • 必須有一個否定的允許所有的方法 - 我能想到的事實是,在未來什麼是無辜的組合現在可能會變成一個危險的組合 - 是一個真正的關注,並有其他人我可能錯過了?

  • 是否有任何必須被拒絕的字符/字符串 - 他們會通過本機ASP.NET保護嗎?

  • 可能有點更主觀,但鑑於它是一個SHA-512散列 - 有沒有限制用戶可以選擇的密碼的最大長度(在合理的參數範圍內),假設密碼的大小/複雜性可能會引發警告,確認他們確實想要設置它。

感謝您的幫助。

編輯:這是一個ASP.NET Web應用程序使用ADO.NET(而不是LINQ/EF)訪問MSSQL2008數據庫。

回答

1

沒有理由擔心SQL插入攻擊,除非您實際上以純文本方式將密碼插入數據庫(危險,威爾羅伯森,危險!),即使如此,如果您參數化查詢它不會一個問題。你應該允許[a-zA-Z0-9]加上一些特殊字符。可能唯一限制的字符是'<',這將觸發ASP.net驗證警告。有很多有趣的工具可以在客戶端進行密碼複雜性檢查。我喜歡this one。它提供了一些即時反饋給用戶,因爲他們正在打字。

3

從非英語的角度來看 - 密碼應該沒有限制。

例如,爲什麼限制日語講話者使用US-ASCII字符集?爲什麼法語演講者不會使用重音字符?

鑑於你的哈希是正確保存的,沒有技術上的理由限制它。

+0

謝謝 - +1引起我的注意國際字符。 – Chris 2009-11-30 20:40:24

1

由於密碼被散列,它將以十六進制格式存儲在數據庫中。因此,我看不出限制允許字符的類型。如果我想在密碼中使用中文字母,我應該可以這樣做。如果我已經安裝了Firefox的擴展程序,它會生成隨機字節並將其用於我的密碼,我應該可以這樣做。這裏的教訓是不限制用戶的密碼。

另請注意,RegEx具有能夠檢測用戶是否使用過任何語言字母的unicode支持。當您驗證密碼的強度時,這可能會變得方便。