[Firefox] 瀏覽器如何知道何時提示用戶保存密碼?


Answers

我有同樣的問題,並找到了解決辦法:

  1. 為了使瀏覽器要求存儲密碼,用戶名和密碼框必須在一個表格中,並且該表格必須實際提交。 提交按鈕可以從onclick處理程序返回false(所以提交並不實際發生)。

  2. 為了使瀏覽器恢復以前存儲的密碼,輸入框必須存在於主HTML表單中,不能通過JavaScript動態創建。 表單可以用display:none來創建。

需要注意的是,密碼是在頁面加載時立即填充的,並且在整個會話期間存在,所以可以通過注入javascript來讀取密碼:這使得這種攻擊更加糟糕。 為了避免這種情況,轉發到一個單獨的頁面只是為了登錄是合理的,它解決了你開始閱讀本主題的所有問題:)。 作為部分解決方案,我在提交表單時清除了這些字段 - 如果用戶註銷並希望再次登錄,則密碼不會被瀏覽器填充,但這對我來說不重要。

Viliam

Question

這與我在這裡問的問題有關: 如何讓瀏覽器提示保存密碼?

這是問題:我不能讓我的瀏覽器提示我保存我正在開發的網站的密碼。 (我正在談論的是當你在Firefox上提交一個表單時,有時會出現這樣的問題:“記住yoursite.com的密碼?是/不是現在/從不”)

這是非常令人沮喪的,因為Firefox(以及其他大多數現代瀏覽器,我希望能以類似的方式工作)的這個特性似乎是一個謎。 這就像瀏覽器的一個魔術,它看你的代碼,或者你提交什麼,或者是什麼東西,如果它看起來像一個帶有用戶名(或者電子郵件地址)字段和密碼字段的登錄表單,它提供保存。

除了在這種情況下,在使用我的登錄表單之後沒有向用戶提供這個選項的情況下,這使我變得瘋狂。 :-)

(我檢查了我的Firefox設置 - 我沒有告訴瀏覽器“從來沒有”這個網站,應該是提示。)

我的問題

Firefox使用何種啟發式知道何時應該提示用戶保存? 這不應該太難回答,因為它就在Mozilla的源代碼中(我不知道該去哪裡看,否則我會試著自己去挖掘它)。 我也沒有找到一個博客文章或從Mozilla開發人員有關這一點的其他類似的開發人員的筆記運氣。

(我可以很好地回答這個問題,Safari或IE瀏覽器;我會想像所有的瀏覽器用戶使用非常相似的規則,所以如果我能得到它在其中之一工作,它將在其他工作。

(*請注意,如果您對我的回答與Cookie,加密或其他任何有關如何將密碼存儲在本地數據庫中的內容有關,那麼您很可能誤解了我的問題。




我也注意到,如果登錄表單在登錄請求後仍然存在,即使它隱藏在頁面上,Chrome也不會記住密碼。

我想它認為登錄操作失敗,從而拒絕存儲無效的憑據。

在Chrome 34.0上看到。




那麼,在我們的網站上 ,一個名為“用戶名”的表單字段鍵入“文本”緊跟著一個名為“密碼”和類型“密碼”的字段似乎是伎倆。




這似乎適用於Mac上的Firefox,Chrome和Safari。 未在Windows上測試。

<form id="bridgeForm" action="#" target="loginframe" autocomplete="on">
    <input type="text" name="username" id="username" />
    <input type="password" name="password" id="password"/>
</form>

<iframe id="loginframe" name="loginframe" src="anyblankpage.html"></iframe>

這需要添加到頁面。 它不能動態添加。 窗體和iframe可以設置為顯示:無。 如果您沒有設置iframe的src,那麼在您提交表單至少一次之前不會顯示提示。

然後調用表單submit():

bridgeForm.submit();

該動作可以是可選的,自動完成可以是可選的。 沒有測試過。

注意 :在某些瀏覽器上,表單必須在瀏覽器響應之前在服務器(不是本地主機而不是文件系統)上運行。

所以這:

http://www.mysite.com/myPage.html

不是這個:

http://126.0.0.1/myPage.html
http://localhost/myPage.html
file://directory/myPage.html