2011-01-23 44 views
8

我想知道如果我應該重新填充(掩碼)密碼字段在其他字段不驗證的窗體中。我已經看到了這兩個網站在形式要麼上:將重新填充表單中的密碼字段是一個安全問題?

  1. 重新填充蒙面密碼字段
  2. 空密碼字段,因此用戶需要再次(即使它是有效的),把它放在

你最好的做法是什麼?重新填充密碼字段是否表示存在安全漏洞?可用性方面,我寧願重新填充字段,也不讓用戶重新輸入。

+1

如果您不通過HTTPS提供表單文檔,那麼**絕對不會**。 – Gumbo 2011-01-23 15:36:02

+0

大概你不會把真正的密碼。因爲你只存儲它的散列你怎麼可能無論如何。 – 2011-01-23 15:37:58

+0

他正在談論用戶登錄的情況,輸入了正確的密碼,但輸入了錯誤的電子郵件/用戶名。在這種情況下,他希望將表單提交併再次輸入,輸入中仍保留相同的信息,包括密碼。 – kbuilds 2017-07-12 16:50:44

回答

8

一個選項,如果你想這樣做,實際上並不是發送密碼純文本,而是一個隨機標記。由於它是一個密碼字段,用戶將無法分辨(除了長度)。然後,將散列的密碼和令牌存儲在會話中。當用戶提交表單時,如果密碼字段與存儲的令牌相同,則使用存儲的密碼散列。否則使用提交的密碼。這解決了緩存問題(因爲隨機令牌在其他會話的請求中沒有意義)。這樣,你永遠不需要在初始表單提交後存儲或傳輸原始密碼...

2

重新填充它對用戶來說更加舒適。但是,如果以傳統方式提交表單(即使用完整頁面重新載入,而不是通過AJAX),則可能會導致包含密碼的html被緩存。有了正確的標題,你可以降低/消除這種風險。在這種情況下使用HTTPs也非常重要。它完全阻止HTTP代理緩存它,而本地瀏覽器緩存通常會承諾nocache頭(即使不是,如果在本地計算機上緩存發生,這不是一個大問題)。

總而言之,我通常寧願不必再因爲另一個字段(例如蹩腳的驗證碼)不正確而再次輸入密碼。但在高安全性環境中,您不想重新輸入密碼除非您使用的是AJAX,並且不必實際發送回輸入的密碼。

0

絕對,清除您的密碼字段,不要重新填充它們。不要爲可用性妥協安全。

0

這是共享計算機上的安全問題,因爲在查看html源代碼時密碼將以明文顯示。不僅在活動瀏覽器窗口中,而且在任何基於磁盤的緩存中。

我個人會使用OpenID,而不是要求用戶發明另一個用戶名+密碼對來記住(這也影響可用性,以更好)。

0

如果您需要從服務器向客戶端發送實際密碼(或從中導出的任何密碼)以重新填充它,這是一個主要的安全漏洞。

如果你只是在客戶端本地保存密碼,直到表單提交驗證(通過不重新加載頁面,例如通過JavaScript),那麼對我來說似乎很好。

+0

如果服務器只是發回(通過https)與用戶最初輸入的字符串相同的字符串,那麼如何存在「主要安全漏洞」? – Pointy 2011-01-23 15:39:21

0

不,它不會(如果做得對)。

  • 網絡中的攻擊者(即瀏覽器和服務器之間)會看到客戶端發送的密碼。如果您使用HTTPS,則您必須使用以用於表單以及目標。
  • 瀏覽器端攻擊者可能在密碼字段中註冊了偵聽器或攔截了請求。
  • 第三方攻擊者可能會嘗試從用戶使用的代理中提取填寫完畢的頁面。設置適當的Cache-Control標題以防止頁面被緩存。