題:
在僅限邀請的網站上向新用戶通知其密碼的最安全方法是什麼?
Avrohom Yisroel
2019-06-24 03:31:37 UTC
view on stackexchange narkive permalink

我正在開發一個人們將擁有帳戶的網站。但是,與大多數網站不同,用戶不註冊,而是由網站管理員邀請。網站管理員將根據他們的電子郵件地址創建一個新的用戶個人資料,然後希望該網站通過電子郵件向他們發送電子郵件,告知他們他們的個人資料已準備就緒。

但是,我不確定讓人們知道其密碼的最安全的方法。在正常註冊中,用戶輸入其選擇的密碼,該密碼被散列並存儲。剩下的就是向他們發送鏈接以驗證其電子郵件地址。

在我們的情況下,他們沒有註冊,因此不要提供密碼。最安全的進行方式是什麼?

此答案建議向他們發送指向可以查看其密碼的頁面的鏈接,但是我不確定這樣做是否有任何好處將他們發送到可以輸入自己密碼的頁面。實際上,我認為後一種建議更好,因為好像已經設置了密碼,網頁可以通知他們已經設置了密碼,如果不是,那麼請立即與管理員聯繫。

從安全角度來看,最好的方法是向新用戶通知其密碼?

順便說一句,通過郵件發送一次性鏈接或一次性初始密碼沒有什麼區別,更容易實現。兩者都將依賴於電子郵件安全性,這是薄弱的,但是是一種常見的信任模型。因此,除非您沒有其他聯繫信息或用戶的加密密鑰,否則就必須使用該信息。確保他們發現一次性物品不起作用時會提醒您(因為有人使用過)
為什麼根本沒有密碼。為什麼不使用通過電子郵件發送的限時一次鏈接使用無密碼登錄。
並非同一件事,但是我們在網站上的工作僅限於邀請和公開之間:用戶使用用戶名,密碼和電子郵件進行註冊,我們手動批准(或刪除)用戶帳戶,用戶收到一封電子郵件以驗證其電子郵件,當他們驗證電子郵件時,可以立即使用設置的密碼訪問其帳戶。
最安全的方法是*個人聯繫*。
@eckes我不同意。是的,電子郵件是最常見的薄弱環節。但是有些人只是將初始密碼粘貼到其硬盤上的某個隨機未加密文件中,因為生成的初始密碼對他們來說比他們想出的任何東西都更安全。
您想要真正的最安全的方法,還是合理實用且方便的最安全的方法?例如,如果您的CTO親自拜訪每位用戶,以面對面的方式告訴他們他們的密碼,那是非常安全的,但是卻不切實際。
@marstato掌握所有這些技巧可能比使用“ password”作為密碼要安全得多,但是我說的是初始密碼,該密碼必須在首次登錄時更改。
@Sentinel不,不是b / s電子郵件非常薄弱,並且有許多替代方法,但是在大多數情況下,電子郵件是唯一可行的信任模型
-1
九 答案:
David Waters
2019-06-24 03:42:37 UTC
view on stackexchange narkive permalink

在這種情況下,最佳做法是向他們發送指向頁面的鏈接,他們可以在其中設置自己的密碼。

您應該確保在他們使用此鏈接進行註冊之後,該鏈接不能用於帳戶接管。實現此目的的一種方法是在URL中包含時間限制的一次性令牌。

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/95423/discussion-on-answer-by-david-waters-whats-the-safest-way-to-inform-a-新的用戶)。
-1這個答案很簡潔。“最佳實踐是X”……可以,但是為什麼呢?這個答案在目前的形式上是毫無用處的。
與登錄時強制您進行更改的臨時密碼相比,一次性鏈接到註冊頁面有什麼好處?
好處(對User3399答案的評論)似乎是UX:如果要向用戶提供臨時密碼,還應強制用戶立即更改它。但是,為什麼還要包括為他們提供臨時密碼的額外步驟呢?為什麼不給他們一個設置密碼的鏈接?另外,後者更易於編碼。對於@DavidWaters,可能值得編輯您的答案以表明這一點(或您認為有什麼好處,即為什麼是最佳實踐)。
@bob請閱讀[移至聊天]的討論(https://chat.stackexchange.com/rooms/95423/discussion-on-answer-by-david-waters-whats-the-safe-way-to-information-a-new-user),這已經出現了:)。您不必提供臨時密碼,最好是通過電子郵件發送一個鏈接,該鏈接在用戶互動後會生成一個永久密碼(以確保它不是鏈接檢查器)。但是,可以,無論哪種方式,都應編輯答案以說明原因。
@Luc還算不錯-很抱歉;手指發癢,沒有想到先看聊天。謝謝!
Samuel Philipp
2019-06-24 04:50:20 UTC
view on stackexchange narkive permalink

您應該只向新創建的用戶發送一個鏈接,他們可以在其中設置自己的密碼。但是請考慮以下想法,以防止濫用,因為郵件以純文本格式發送:

  • 確保鏈接只能使用一次(因此,僅當用戶還沒有密碼時)
  • 可能會設置一個日期,直到需要設置密碼為止,否則他們需要請求一個新鏈接
  • 隨機鏈接生成,因此(幾乎)不可能猜測到該鏈接電子郵件
  • 添加另一步驗證(例如,要求他們輸入電子郵件和/或生日)
我有點同意額外的驗證步驟,但是我不會將其作為電子郵件或生日。這些通常被認為是很容易找到的公共信息,或者通常很容易在各種社交媒體平台上共享。理想情況下,您希望可以自動驗證但不容易進行數據挖掘的內容,儘管我不知道可能是什麼。
@Nzall取決於網站和對安全性的需求,但是如果用戶輸入信用卡,則可以通過這種方式驗證其姓名。
不要使用信用卡驗證;很多人的名字與信用卡上的名字不符,其原因有很多(共同賬戶,更名過程中,非羅馬文字的本地化等),而且不是每個人都擁有一張信用卡。
@GrantGarrison為什麼實際上除非將信用卡信息處理到購物頁面,否則將其一方面移交給任何頁面?這尖叫著網絡釣魚的企圖。
根據用戶電子郵件提供商的不同,您還可以至少防止“中間”監聽-例如如果您在端口587上連接gmail並驗證其SSL證書,則可以合理確定只有最終用戶才能閱讀電子郵件。
@FrankHopkins確實需要一個非常安全的網站,不僅人們信任它,而且無論如何都必須確定身份。可能只有極少數網站可以使用此功能,但它可以正常工作。
@GrantGarrison人們*不應該*信任一個網站,該網站在不購買商品時會詢問付款信息,因此人們信任的網站不能使用信用卡信息來驗證身份。
user3399
2019-06-24 12:51:40 UTC
view on stackexchange narkive permalink

根據我的經驗,通常以兩種方式完成。

一種方法已經由David Waters描述過,所以我不再贅述。

另一種方法是向他們發送一次性使用密碼,直到他們必須在特定時間段(通常是48小時窗口)內進行更改。

使用此方法,您需要確保他們收到隨機密碼wich具有足夠的安全性,不會被暴力破解,並且是唯一的,無法再次使用。

一旦用戶使用此密碼進行連接,網站應將其重定向到可以選擇所需密碼的頁面。

如果您向新用戶發送帶有隻能隨機打開一次的長隨機令牌的鏈接,則實際上沒有時間限制。我為幾年前工作的大型託管公司創建了這樣的系統,並將其集成到他們的支持系統中,因此可以生成新密碼,生成令牌以及帶有URL的電子郵件,然後按一次按鈕。
從用戶體驗的角度來看,我認為這種解決方案會更糟。如果在首次登錄後需要更改密碼,那有什麼意義?讓我直接設置一個密碼,而不必復制粘貼(或鍵入)一個臨時密碼,然後*再*設置一個新密碼。(只要有可能)。
@Marc.2377如果系統仍然需要定期更改密碼,則此過程與X倍的時間後更改定期密碼的過程相同,在這種情況下,這是用戶已經知道的過程。從UX的角度來看,我寧願稍微偏於某些新流程,而從技術的角度來看,我更希望能夠重用許多現有的流程/代碼。但是,如果不存在這樣的過程,我將與您同在。
-1
@P.Goetterup,因此是否必要實際上取決於安全性要求。那不是在您的情況下,並不意味著它不是在所有其他情況下。儘管理所當然地得到了OP的問題-以及他需要在這裡提出的事實-使得OP的系統對安全性的要求不高(希望^^)。
TJK
2019-06-24 19:17:01 UTC
view on stackexchange narkive permalink

請您的用戶通過OpenID或Oauth提供程序(例如Google,Microsoft,Amazon等)進行首次身份驗證,以驗證其身份。這避免了將密碼通過電子郵件發送給用戶的任何安全問題。

有人可能會問,為什麼要使用OpenID或OAuth的人甚至都沒有用戶名/密碼。
@fluffy,反之亦然,如果用戶選擇使用電子郵件/密碼來避免使用任何公共SSO / OpenID解決方案,則在完成一些註冊步驟後,他會像瘋子一樣大笑,然後被要求通過任何此類提供商進行登錄^^
@fluffy在許多情況下,提供商發生中斷或消失。特別是如果您允許外部提供商,則至少必須從中進行恢復。但是,是的,如果您想遠離帳戶管理或依賴其他帳戶,則取決於您提供的服務的深度。
SQB
2019-06-26 14:55:47 UTC
view on stackexchange narkive permalink

因此,用戶擁有一個具有關聯電子郵件地址的帳戶,但尚未設置密碼。這與他們設置但忘記密碼時的情況完全相同。

因此,請實施“忘記密碼”過程,該過程允許用戶通過電子郵件請求鏈接以設置新密碼。然後讓您的用戶在首次使用其帳戶時使用該過程設置密碼。您可以在創建帳戶時將其密碼設置為隨機生成的字符串。

這使您可以自行創建帳戶,而不必生成一次性或過期的URL 然後。如果他們從不使用自己的帳戶,則密碼將保留為隨機生成的字符串,這樣對防止暴力破解的安全性應該足夠安全。

CDRohling
2019-06-24 15:27:51 UTC
view on stackexchange narkive permalink

從我的角度來看,電子郵件是一種常用的通信渠道。通常認為它是安全的,如果每個人都可以正確設置某些事情,例如將SSL / TLS連接用於POP3 / IMAP或SMTP,則可能是正確的。實際上,並非所有人都知道這些技術有什麼用,只是在沒有傳輸安全性的情況下向前發展,因此配置了錯誤的系統。那麼如何解決這個問題呢?

我會說,將有一種更安全的方式為您的客戶提供帳戶。考慮一下您的手機。無需進行設置即可使用。這樣就不會出現配置錯誤的問題。因此,讓我們考慮一下。我知道SMS令牌和電話也不是那麼安全,但是從另一部電話中將SMS重定向到黑客電話要困難一些。那麼,為什麼不使用電話號碼向他們發送一次密碼,以供他們在設置頁面上使用並完成註冊呢?我會說這比使用電子郵件更安全。

無論如何,如果您想使用電子郵件,我不會為用戶設置密碼並將其發送給他們。我有一些理由考慮為什麼不應該這樣做,讓他們自己設置密碼:並且您可以看到它,即使它們不是真的,他們也不會信任您。

  • 某些用戶沒有更改密碼,而將其保留為已發送的密碼。客戶將密碼保留為原來的密碼,而某人可以訪問其他電子郵件帳戶或發件人的電子郵件,則他得到了密碼。鏈接,讓他們可以自己創建密碼。
  • 我非常不願意將我的電話號碼提供給某個網站。這是一條個人身份信息,這是一個過於可靠的個人標識符,當掉入不正確的人手中時,很容易被濫用或騷擾。如果您的服務要求我提供您的電話號碼,那麼我將不使用它。
    @Philipp是的,我也這樣做,但是,如果我想從公司獲得服務,則需要正常提供。我認為問題在於我們不知道公司提供的服務。如果這是社交媒體Plattform,我不會給他們我的電話號碼,但是如果是託管服務,並且他們有一天需要與我聯繫,該怎麼辦?正如他所說,他們需要管理員來設置所有內容,這不是正常的服務。
    我曾與多家託管公司合作,但從未通過電話與一家託管公司通話。與他們的所有通信通常都是通過電子郵件進行的。他們要求提供電話號碼的原因是,如果您不支付託管費用,則可以使用PII來跟踪您。
    @Philipp我理解您的觀點,但有時別無選擇。如果您需要服務,則需要提供電話號碼。否則,您將無法從他們那裡得到它。我認為普通客戶會理解這一點,並且這種做法沒有問題。Anayway,問題是如何以最安全的方式提供密碼,這就是我的想法。如果好還是不好,他需要自己考慮一下。但是,謝謝您的投入!
    我同意,除非我們知道服務的詳細信息,否則沒有理由取消兩因素身份驗證。此外,在這個問題上,不願提交電話信息是一個信任問題,而不是信息安全問題
    電話號碼不是兩要素驗證。您的_phone_是第二個因素(物理的),但是數字只是另一條數據,就像電子郵件或密碼一樣。如果不訪問手機,就無法訪問手機上適當安全的身份驗證器應用。但是,由普通的社會工程師將您接過來的短信/電話輕鬆,輕鬆地重定向到一名最低工資的工人上,該工人(理所當然)根本不關心您的安全。更糟糕的是,這不是密碼+ 2FA代碼,僅是初始密碼。無論哪種方式,這裡都沒有第二個因素。
    我認為我們缺少主要主題。2FA尚無定論。在我的思維中,只應該切換通訊渠道。
    Fabby
    2019-06-26 03:01:40 UTC
    view on stackexchange narkive permalink

    使用最廣泛的方法是向用戶發送一個鏈接,以創建自己的密碼。

    如果是不切實際的(例如,EG,因為您尚未開發此部分仍要訪問該站點),並且仍然想通過手動給他們一個第一個密碼來邀請坐在您旁邊的用戶,請使用一次性秘密

    這裡有很多服務,但是 https://onetimesecret.com很容易記住。

    別忘了告訴他們如果有人通知您已經閱讀了他們的秘密(例如,FSB或NSA已經訪問了他們的帳戶);-)

    單擊此處機密,則需要訪問我們的僅邀請服務。

    如果收到以下警告:

    未知機密

    該機密不存在或已被查看過。

    請立即通過+00800 IVEBEENHAD

    與我們聯繫。
    不幸的是,許多防病毒程序都會閱讀電子郵件,從而使一次性查看工作流程無效。另一方面,一次性USE令牌創建密碼是安全的。如果政府機構例行閱讀隨機電子郵件來違反法律,除非他們為您完成了工作流程,否則他們將不會知道密碼。
    @gburton讀取電子郵件*並“獲取”其中的HTTP鏈接?*請[在聊天中ping我](https://chat.stackexchange.com/rooms/151/the-dmz)進行詳細說明,因為我從未聽說過那個。
    我沒有時間,但是從我的頭上知道諾頓做到了。IIRC是殺毒軟件的一個相對普遍的功能。如果您考慮一下,這是有道理的,尤其是當他們提供電子郵件網絡釣魚防護時。當一個客戶端的300個用戶無法重置其密碼時,我不得不陪審評審軟件來解決此問題。
    我正在接受您的承諾* now ... * **;-)** @gburton
    Steve Gazzo
    2019-06-24 19:31:28 UTC
    view on stackexchange narkive permalink

    發送一個鏈接,以使用隨機生成的一次性令牌設置自己的密碼。您現在正在做的事情違反了一些安全原則:

    1)網站管理員不應該知道用戶的密碼

    2)永遠不要以明文形式發送密碼

    確保令牌是隨機生成的,將防止攻擊者強行強制使用可能的令牌,然後自行設置密碼。用戶設置自己的密碼消除了對安全分發渠道的需求。我還建議對令牌設置一個時間限制,然後必須生成一個新的時間限制。這樣可以避免未設置密碼的用戶可以猜測其令牌並劫持其帳戶。

    “這將防止未設置密碼的用戶可以猜測其令牌並劫持其帳戶的情況。”因此請使用長令牌。設置時間限制並不會真正增加IMO的安全性值。
    難以猜測的令牌很難猜測,但是時間限制也意味著無法使用已洩露的令牌。很難破解的非常長,難以猜測的令牌仍然是一個安全問題。不過,我應該對答案中的折衷方案更加清楚。
    bobuhito
    2019-06-25 23:17:44 UTC
    view on stackexchange narkive permalink

    我會將同一封電子郵件(來自admin@InvitedTrading.com)發送給所有人(電子郵件之間的唯一區別是自動生成的長帳戶代碼#不能強行使用):

     您可以使用新的交易帳戶#3298889119019881。要激活該帳戶,請:1)用“我接受密碼後綴X接受”字樣回复此電子郵件2)然後,登錄https://InvitedTrading.com使用用戶名= <your email>和密碼= <3298889119019881 +私人詳細信息+ X> <private details>是一個由名字,姓氏,生日和社會保險號組成的字符串,例如,“ 3298889119019881JohnDoe 06251984123456h,John Doe 06251984123456,號碼123456789,且X = f76djisuh您必須隨後更改密碼並可以根據需要更改用戶名。或者,什麼也不做,則所有內容都將在48小時內刪除。表示他們應該已經知道您上面的私人詳細信息,請不要執行任何操作。 
    作為必須為期望具有一定水平的技術知識的人群開發網守的人,我可以向您保證,此方面的UX將使*很多*不太擅長計算機或計算機的人感到困惑英語(因此將導致許多用戶無法註冊),被視為網絡釣魚。
    我同意,該程序需要完善並可能標準化。僅涵蓋“單因素加個人因素”身份驗證的所有可能檢查。


    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
    Loading...