剛剛完成我的註冊/登錄/註銷等...我的網站的功能類型,我很好奇。是否應該強制用戶輸入符合特定強度或字符集的密碼?用戶的密碼應該限制在特定的字符集還是實力?
例一,迫使他們使用長度的字母數字密碼> 8
例二,只允許他們使用字母數字字符和某些特殊字符(例如:!@#$%)。
第一個例子顯然是一個很好的事情,在銀行這樣的敏感網站上執行,但我想不出一個很好的理由來限制用戶的密碼字符。只要字符串被清理爲sql注入,它應該無關緊要什麼他們使用字符?
編輯
,當然還有密碼被HASHED
剛剛完成我的註冊/登錄/註銷等...我的網站的功能類型,我很好奇。是否應該強制用戶輸入符合特定強度或字符集的密碼?用戶的密碼應該限制在特定的字符集還是實力?
例一,迫使他們使用長度的字母數字密碼> 8
例二,只允許他們使用字母數字字符和某些特殊字符(例如:!@#$%)。
第一個例子顯然是一個很好的事情,在銀行這樣的敏感網站上執行,但我想不出一個很好的理由來限制用戶的密碼字符。只要字符串被清理爲sql注入,它應該無關緊要什麼他們使用字符?
編輯
,當然還有密碼被HASHED
請,不要告訴我是什麼角色我可以在我的密碼不能使用。
你應該支持全系列的Unicode碼點的密碼,用ASCII控制字符可能是個例外(\0
– \0x20
)。
您有責任確保任何普通字符在密碼中工作,包括空格,引號和反斜槓。
密碼不能被SQL注入攻擊,因爲數據庫不能看到實際的密碼。在他們到達數據庫附近的任何地方之前,您應該對您的密碼進行散列和填充。 (使用bcrypt)
最低複雜性要求是一個雙刃劍。如果您需要密碼太複雜以至於用戶不記得,他們最終會將其寫在某個地方,並且可能在某處。
您至少需要6個字符和至少兩個A-Z
,a-z
,0-9
或任何其他字符。
沒有特殊字符? Tsk,tsk! :P –
@Jared:我說這是最低限度。在設定實際最低值之前,您應該考慮所涉及的風險以及用戶的複雜程度。 – SLaks
我確實說過:P對吧?我知道很多會抱怨的人,並且在上面註釋我的評論。 –
SQL注入應該不重要:你應該在它到達數據庫之前對它進行哈希處理。真的沒有理由限制字符集。
有些銀行網站限制密碼唯一號碼,所以用戶可以通過撥號盤輸入密碼進行電話交易。但個人而言,我不喜歡限制字符集,因爲我使用的是站點密碼生成器。 –
至少,檢查用戶是否提交了針對前100個密碼的密碼檢查。我建議強制執行特殊字符,但這取決於您正在建立什麼樣的網站以及您需要進入的障礙。安全並不容易,但有時這是必要的。 –
我對安全哈希的重視不僅僅針對您,還包括所有遇到此問題的人。仍然有太多(閱讀:'> 1')網站,當被要求時向用戶發送他們的實際密碼。 – SLaks