Complex Password Utility
很早以前就在使用Lastpass進行密碼管理,如自動生成複雜密碼,Web頁面自動填寫和登陸;並且在去年開始付費(目前僅支付一年,主要是因為Android移動平臺上lastpass免費版使用時間有限,僅16天)。
自CSDN明文密碼洩露後,密碼管理進一步加強,主要是加強密碼複雜度,並且定期更換密碼。很不幸的是,那是我的CSDN賬戶也在公佈之列,後來一度想找回,無奈CSDN部落格的ID已經從dylanninin
變為dylan_ninin
,心中還是稍有不悅。
最近在一些專案的測試過程中,發現複雜的密碼其實有助於測試使用者認證模組中很容易被忽視的小問題,尤其是在呼叫作業系統的命令時。
目前因密碼包含特殊字元(如&
第一例,是在使用Java構建基於Samba檔案共享的搜尋系統時,因呼叫Windows系統的net use \\samba_server_ip password /user:username
時,password
沒有加引號,導致密碼複雜時無法成功認證。
第二例,也是因少了引號,在Linux平臺上同步修改LDAP和Samba密碼,PHP呼叫rtrim(shell_exec("/usr/bin/mkntpwd -N $new_pwd"));
,如果new_pwd
包含&
符號,mkntpwd
就只能在後臺執行,密碼也就從&
處截斷了。
想想這些問題其實很簡單,但也很容易被忽視。當然了,從發現這些問題的測試來看,一定複雜度的密碼確實起到不少作用,至少一個很容易被忽視的死角馬上就暴露出來了。
程式
因在日常工作中,有一部分是負責使用者賬號和許可權分配,使用Lastpass自動生成密碼容易導致密碼繁多難以管理,且也有洩露的危險。於是動手寫了一個簡單的自動生成密碼工具,主要使用Python的random和string標準庫。
程式主要配置在passwdgen.py
的config
中,可以自定義:
"""password generator config""" config={ 'min':8, #密碼最小長度 'max':32, #密碼最大長度 'length':8, #生成密碼長度 'cs':2, #字元character最小個數 'ds':2, #數字digit最小個數 'ps':2, #特殊字元punctuation最小個數 'users':[ #待生成密碼的使用者列表 'dylanninin', 'dylan', 'ninin' ], 'log':{ 'file':'passwdgen.log', 'format':'%(asctime)s - %(name)s - %(levelname)s - %(message)s' } }
執行效果如下:
$python passwdgen.py
USERNAME PASSWORD
dylanninin U'13Dz/m
dylan `9K7x\yJ
ninin 8x%df-06
為避免清空控制檯導致生成的密碼忘記,已經做了日誌記錄,passwdgen.log
:
2013-01-17 20:37:25,937 - root - INFO - password generation started ... ...
2013-01-17 20:37:25,937 - root - INFO - USERNAME PASSWORD
2013-01-17 20:37:25,937 - root - INFO - dylanninin U'13Dz/m
2013-01-17 20:37:25,937 - root - INFO - dylan `9K7x\yJ
2013-01-17 20:37:25,937 - root - INFO - ninin 8x%df-06
2013-01-17 20:37:25,937 - root - INFO - password generation ended ... ...