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


5 Answers

我遇到了同樣的問題,並找到了解決方案:

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

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

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

Viliam

Question

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

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

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

除了在這種情況下,在他們使用我的登錄表單之後,它不會向我的用戶提供那個選項,並且這使我變得瘋狂。 :-)

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

我的問題

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

(如果這個問題被Safari或者IE瀏覽器回答,我會覺得很好,我想所有的瀏覽器都會使用非常相似的規則,所以如果我能夠在其中一個瀏覽器上運行它,它將在其他瀏覽器中運行。)

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







除了已經說過的很多之外,我意識到輸入字段不能被“禁用”。 我們有一個多步驟登錄,首先要求輸入用戶名,然後在下一個屏幕上輸入密碼。 在第二個屏幕上,我們重複了電子郵件,但將其禁用並阻止了Chrome等。 人。 從認識到用戶名的有效字段。

由於我們真的想要保留這個禁用的輸入字段,所以我們最終採用了這種冒險的解決方法:

<input type="text" name="display-username" id="display-username" value="ENTERED_USERNAME" placeholder="Username" disabled="disabled">
<input type="text" name="username" id="username" value="ENTERED_USERNAME" placeholder="Username" style="display: none;">
<input type="password" name="password" id="password" value="" autofocus="autofocus" autocomplete="on" placeholder="Password" required="required">

我不會推薦這麼做,但也許它會指出某人在他們自己的代碼中:

  1. 第一個元素在禁用的輸入字段中顯示用戶名。 禁用不會作為表單的一部分提交,並且瀏覽器無法識別殘疾人。
  2. 第二個元素是一個合適的輸入字段,其中type =“text”和name / id =“username”。 這被瀏覽器識別。 為了防止用戶編輯它,我們用CSS(display:none)隱藏它。



這似乎適用於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




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

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

在Chrome 34.0上可以看到。




那麼,在我們的網站上 ,一個名為“用戶名”的表單字段鍵入“文本”後面緊跟著一個名為“密碼”和類型“密碼”的字段,似乎可以做到這一點。




Related