回答
精心設計的系統並不一定需要防止用戶名中的任何特殊字符。
也就是說,原因強調傳統上被接受,是下劃線通常被視爲一個「單詞」字符,連同字母和數字。鑑於這種區別,它通常是唯一的其他角色。在正則表達式中,甚至在大多數操作系統的基本級別都是如此(在一個單詞中鍵入下劃線並雙擊字母,選擇將延伸超過下劃線。現在嘗試使用短劃線,這很可能會不是)
取決於您的用戶名的使用方式。沒有一個通用規則,不知道上下文。
人們可能想寫他們的用戶名like_this而不是likethis或LikeThis。
因爲它允許以可讀的方式表示多個單詞。
Peronally我真的,真的希望人們會擴大一些東西,允許破折號和撇號。這將允許人們使用非英語拼音名稱(例如:美國土着部落名稱,例如She-Ki和Ke`Xthsa-Tse)
我最糟糕的shell腳本噩夢成真 – glyph 2017-01-02 19:15:57
網站強制執行這些規則的主要原因是可讀性(因爲用戶名像~-|this<>one|-~
令人討厭)。這也可能是因爲它的工作較少(下劃線通過\w+
正則表達式匹配,而破折號和其他特殊字符則不匹配),但我懷疑這是一個主要原因。
沒有「標準」,所以如果上述原因都沒有打擾您,請做任何您想要的。就我個人而言,我希望看到更多的網站接受破折號和時段,但這實際上是可讀性和一致性與表達的個人偏好。
字符限制的另一個好的理由是防止用戶僞造。當你有一個知名用戶(「例子」)的社區時,有人可能會出現並以「例子」的形式發佈。欺騙那些沒有進一步看待個人資料的人。這在維基百科上發生了很多 - 查看用戶列表:http://en.wikipedia.org/w/index.php?title=Special:ListUsers&username=Jimbo%20Wales) – Nicole 2010-01-13 00:06:05
@Renesis:是的,但你可以無論如何,在名稱的末尾添加一個數字。當然,這比一段時間更明顯,但無論您添加到系統中的字符限制如何,它都可以工作。 – 2010-01-13 00:09:10
下劃線傳統上允許用大多數編程語言的標識符,並且通常是唯一允許的「特殊」字符。
但許多網站的登錄仍然不接受任何特殊字符,並僅限於小寫/大寫字符和數字...
而其他都是用細真的很特別的人;-)
沒有規定當我使用這個:
^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$
這需要長度爲4且最多32個字符。它必須以單詞字符開頭,並且可以有不連續的點和破折號。我用這個的唯一原因是因爲它不夠嚴謹與幾乎所有的東西:)
有效整合:
test.tost
無效:
測試..tost
嗯,所以Unicode字符可以嗎?我經常想知道人們是否在他們的用戶名中使用了Unicode字符,或者爲了簡單起見,系統是否完全阻止了它。 – Trejkaz 2012-02-13 03:10:20
我不喜歡可讀性參數,因爲它會干擾人們在用戶名中使用其母語的能力。
我建議你使用納入http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories或http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedNamedBlocks的字符類進行實驗。我還沒有試過,但是
[\p{L}\p{N}\p{M}]
可能是值得一試的。
將它限制爲這些字符(甚至是它們的ASCII子集)可以防止用戶名被接受。通過不接受這些字符,您可以防止廣泛的用戶名或用戶名 - 看起來像其他用戶名。
是:避免必須轉義特殊字符。懶惰的程序員只會放棄用戶輸入的內容,直接進入代碼中,這就是導致注入攻擊的原因。
即使沒有惡意使用它,允許用戶輸入在其他地方會衝突的字符也可能比必要的更麻煩。例如,如果您決定爲每個用戶創建一個文件系統目錄,要將其上傳內容存儲在其中,則用戶名必須符合該操作系統上的目錄命名規則(例如,Windows上沒有\/:*?"<>|
)。
一旦您避免了衝突(如命名目錄),並且刪除了"';%
和//
以避免注入攻擊,您已經刪除了大部分標點符號和「爲什麼某人甚至需要在其用戶名中標點符號」?
寫一個快速正則表達式來驗證用戶名對[a-zA-Z0-9_]
並且用它來完成要比查找所有可能的不會衝突的標點符號或以某種方式將它們映射到其他字符更容易。然後,就像計算中的許多事情一樣,只要有足夠多的人開始爲用戶名開始提供字母,數字和下劃線,並且人們開始製作用戶名以符合該規範,它就成爲了事實上的標準和自我延續!
@CarlosMuñoz:最初的問題是詢問在很多網絡系統上如何嚴格限制可能的原因。 很明顯,建立一個可以接受其他角色的系統是可能的,但最初的問題是問爲什麼並非總是如此。 – Rikki 2013-09-27 14:17:57
- 1. ColdFusion用戶定義函數名稱的有效字符是什麼?
- 2. URL應該是什麼字符編碼?
- 3. joomla中有效用戶名的限制是什麼2.5
- 4. Java的keytool的別名有效字符是什麼?
- 5. Java方法名稱的有效字符是什麼?
- 6. 什麼是appSettings密鑰有效字符?
- 7. 什麼是「字符串與詮釋」應該是什麼意思?
- 8. 不應該r'\'是python中的有效字符串值嗎?
- 9. 按名稱瀏覽用戶的有效方法是什麼?
- 10. 爲什麼'\ 117'在Java中是有效的字符文字?
- 11. 用戶代理字符串:我應該捕獲什麼?
- 12. 什麼樣的用戶名應該在sql server 2005中給出?
- 13. 什麼是允許的字符Snapchat的用戶名
- 14. 應該用swprintf()打印「0x0」的格式字符串是什麼?
- 15. 什麼字符在URL中有效?
- 16. 爲什麼我的模型是有效的?它不應該
- 17. Rspec中的'應該'是什麼?爲什麼`應該redirect_to`工作?
- 18. 什麼字符在SQL Server數據庫名稱中有效?
- 19. 該用戶決定的預期行爲應該是什麼?
- 20. 爲什麼models.User在用戶名中允許使用無效字符?
- 21. http授權標題中的有效字符是什麼
- 22. Python:爲什麼在if語句中該數字應該是字符串?
- 23. 什麼是在JavaScript中通過字符串的字符最有效的方法?
- 24. 什麼時候應該使用字符串而不是stringstream?
- 25. 應該是什麼
- 26. JCA部署描述符(ra.xml)字符編碼應該是什麼?
- 27. OpenFire Server中用戶的JID應該是什麼?
- 28. css的名字應該是?
- 29. 什麼字符應該在sql字符串參數中轉義
- 30. 什麼應該是我的項目的連接字符串?
那些不容易閱讀的字符或者讓系統變得凌亂的字符是不容許的候選人。像@ @#$%這樣的用戶名會很糟糕。 – Veger 2010-01-12 23:50:51
儘管Veger的評論從可用性的角度來看是有效的,但它忽略了Renesis點,這是一個技術問題:構成「用戶名」的內容沒有固有的技術限制。 – 2010-01-12 23:53:45
「精心設計的系統」有一天可能會遇到現實世界的集成和安全案例。域名,電子郵件,文件名和其他有限制的系統。 [Unicode用戶名](http://unicode.org/reports/tr36/)存在很多安全問題,如[Spotify]所示(https://labs.spotify.com/2013/06/18/ creative-usernames /)可能會有同樣的想法。要解決所有這些問題,只需遵循[POSIX.1-2008](http://serverfault.com/a/578264/226737)便攜式用戶名的標準。 – saaj 2016-08-31 15:26:25