1. 程式人生 > >web安全:防止瀏覽器記住或自動填寫使用者名稱和密碼(表單)的終極解決方案

web安全:防止瀏覽器記住或自動填寫使用者名稱和密碼(表單)的終極解決方案

最近專案上要求做到這一點,在網上搜了一圈,發現都是不完美的,不相容全部的瀏覽器,於是只能自己摸索了,最終得出了終極解決方案:

涉及:

disabled 或 readonly 

display:none;   隱藏用,隱藏後不佔位置

visibility:hidden;   隱藏用,隱藏後佔原來的位置

position:absolute;z-index:-1;   隱藏用,隱藏與否取決於z-index相對的值,這裡的-1是我自己用的

autocomplete:"off";  

網上說,這個屬性有時失效,有個解決辦法是將off改為new-password。

還有個說法(來自MDN),之所以new-password能夠解決off失效的原因是autocomplete屬性的有效值只有on和off,預設值是on,

如果autocomplete的屬性是除on和off外的值,那麼就是個無效值,那麼瀏覽器就會放棄對該屬性的執行。

換句話說,除on和off外的任一值,可以隨便編都行。

在這裡,我用off就夠了,測試過程中沒遇到失效的情況,所以暫時用off。

程式碼如下:

(最簡潔)

<input type="text" name="name" value="admin" style="position: absolute;z-index: -1;" disabled autocomplete = "off"/><!-- 這個username會被瀏覽器記住,我隨便用個admin-->
<input type="password" name="pwd" value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/><!-- 這前面兩個name屬性要不要和真正的一樣,具體自己除錯下 -->
<p><input type="text" maxlength="20" placeholder="使用者名稱" id="name" name="name" autocomplete = "off"/></p>
<p><input type="password" maxlength="20" placeholder="密碼" id="pwd" name="pwd" autocomplete = "off"/></p>
<p><input type="text" maxlength="4" placeholder="驗證碼"  id="vcode" name="vcode" autocomplete = "off"/><img id="vcode" title="點選更換驗證碼" /></p>
<p><input type="button" value="登入" id="login"/></p>
<p style="visibility: hidden;"><input type="password" name="pwd" value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/></p><!-- 這個password的值會被瀏覽器記住,我隨便用個空格 -->

<input type="text" value="admin" style="position: absolute;z-index: -1;" disabled autocomplete = "off"/><!-- 這個username會被瀏覽器記住,我隨便用個admin-->
<input type="password"  value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/>
<input type="text" name="name" style="display: none;" disabled autocomplete = "off"/><!-- 這裡的autocomplete可以不要 -->
<input type="password" name="pwd" style="display: none;" disabled autocomplete = "off"/><!-- 這裡的autocomplete可以不要 -->
<p><input type="text" maxlength="20" placeholder="使用者名稱" id="name" name="name" autocomplete = "off"/></p>
<p><input type="password" maxlength="20" placeholder="密碼" id="pwd" name="pwd" autocomplete = "off"/></p>
<p><input type="text" maxlength="4" placeholder="驗證碼"  id="vcode" name="vcode" autocomplete = "off"/><img id="vcode" title="點選更換驗證碼" /></p>
<p><input type="button" value="登入" id="login"/></p>
<p style="visibility: hidden;"><input type="password"  value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/></p><!-- 這個password的值會被瀏覽器記住,我隨便用個空格 -->
測試的瀏覽器:

ie瀏覽器(7~11,edge),360安全瀏覽器(全部模式),360極速瀏覽器(全部模式),谷歌瀏覽器,火狐瀏覽器,獵豹瀏覽器

分析以上程式碼的原因:

有的瀏覽器會自動記錄登入的賬號,並且會記錄第一個使用者名稱和最後一個密碼input。

對360安全瀏覽器,單數個的話360安全瀏覽器不會出現提示是否要儲存密碼。

disabled:和360瀏覽器、頁面第一個聚焦點有關。

改進過程:

一開始是在真正要用到的使用者名稱密碼input前面加兩個對應name的隱藏使用者名稱密碼input,用於對付瀏覽器的自動填充表單。

但是,這個方案有個缺點:瀏覽器會記住登入的賬號(有的瀏覽器會提示是否要記住),每當填寫密碼時(不用tab切換到,直接用滑鼠獲得焦點),

會提示是否使用以下密碼。這樣別人不僅僅能夠登入,並且還可以知道密碼的明文(瀏覽器審查元素改密碼input的type為text或在瀏覽器設定上檢視儲存的使用者名稱密碼)

經過N次的測試,發現= =瀏覽器只會記住第一個使用者名稱input的值和最後一個密碼input 的值,並且這些input不能用display:none。

於是在上面的基礎上,在前和後增加另一種隱藏方式的一組使用者名稱密碼input:用position:absolute;z-index:-1; 來隱藏

問題解決了,但是出現了一個小問題:360安全瀏覽器會提示是否記住密碼,並且,最重要的是,是輸入密碼的時候,還會提示是否使用以下項的密碼。

又經過N次的測試,發現,單數的input時,360安全瀏覽器不會再彈出是否記住密碼的提示。

最後發現,把最開始加的兩個display:none去掉也行,並且也是單數的input。

ok,完美。

結論:

<input type="text" value="admin" style="position: absolute;z-index: -1;" disabled autocomplete = "off"/><!-- 這個username會被瀏覽器記住,我隨便用個admin-->
<input type="password"  value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/>
<p><input type="text" maxlength="20" placeholder="使用者名稱" id="name" name="name" autocomplete = "off"/></p>
<p><input type="password" maxlength="20" placeholder="密碼" id="pwd" name="pwd" autocomplete = "off"/></p>
<p><input type="text" maxlength="4" placeholder="驗證碼"  id="vcode" name="vcode" autocomplete = "off"/><img id="vcode" title="點選更換驗證碼" /></p>
<p><input type="button" value="登入" id="login"/></p>
<p style="visibility: hidden;"><input type="password"  value=" " style="position: absolute;z-index: -1;" disabled autocomplete = "off"/></p><!-- 這個password的值會被瀏覽器記住,我隨便用個空格 -->

PS:z-index的值和autocomplete的值根據實際情況來調整。


對於具體的情況,每個人會有不同的表單,可能會出現佈局啊什麼的不完美,

可以根據新增一組或多組display:none 的使用者名稱密碼input和在input的外層加個<p style="visibility: hidden;"></p> 來調整顯示!

如果是表單,一樣的道理,這裡不多說了。(注意要在表單裡面加input)

如果不是登入頁面,而是其他的頁面,如修改密碼的頁面,可以用小招:在舊密碼input前面加個隱藏的密碼input

<input type="password" style="display: none;" disabled autocomplete = "off"/>

如果其他的頁面,不只有密碼,還有使用者名稱input,那麼與修改密碼頁面一樣,在前面加多個使用者名稱密碼input組合即可

<input type="text" style="display: none;" disabled autocomplete = "off"/>
<input type="password" style="display: none;" disabled autocomplete = "off"/>

或者(推薦)

<input type="text"  name="username" style="display: none;" disabled autocomplete = "off"/>
<input type="password" name="password" style="display: none;" disabled autocomplete = "off"/>

又或者(推薦)

<input type="text"  id="username" style="display: none;" disabled autocomplete = "off"/>
<input type="password" id="password" style="display: none;" disabled autocomplete = "off"/>

這裡臨時的text和password要和真實的text、passwordnameid值要一樣!!!

如:臨時text的id值和真實的text的name值一樣,或臨時text的name值和真實的name值一樣等等!!!

最後小tip:

每次登陸時(按回車或者點選登入),都將真正的使用者名稱密碼input置空比較好,處於安全考慮

相關推薦

web安全防止瀏覽器記住自動填寫使用者名稱密碼()的終極解決方案

最近專案上要求做到這一點,在網上搜了一圈,發現都是不完美的,不相容全部的瀏覽器,於是只能自己摸索了,最終得出了終極解決方案: 涉及: disabled 或 readonly  display:none;   隱藏用,隱藏後不佔位置 visibility:hidden;

禁止chrome瀏覽器自動填充解決方案

經過測試,對chrome42,重寫input: auto-fill樣式不起作用,加上autocomplete="off"也不起作用。 因此使用了兩個隱藏的輸入框: <input type="text" style="display:none"/> <inp

真的炸了讓人頭痛的小程式之『圖片懶載入』終極解決方案

轉載:請寫明原文連結及作者名 ‘小小小’ 小程式真的會取代一切?QQ群:139128168 ← 點選加群 微信小程式中,懶載入特效讓人頭疼不已,因為小程式完全沒法操作dom,所以位置的操作在小程式中,變得極其的難~~ 先看特效: 我們將其拆分為如

防止瀏覽器記住密碼後,自動填充

       自動填寫表單這個功能在登入的時候能實現就可以了。但是在內容頁面裡面的表單也被瀏覽器預設填充上了記住的資料,這就很噁心了。在網上百度了一下後發現,autocomplete="off" 方法對於搜狗、火狐這些瀏覽器來說並不管用。 再嘗試了一下各種姿勢後,得到解決方

web安全通俗易懂,以實例講述破解網站的原理及如何進行防護!如何讓網站變得更安全。收藏

調用 密碼破解 選項卡 講解 交互 不為 的人 文本 行修改 博主總結的還不錯 轉載收藏於 http://www.cnblogs.com/1996V/p/7458377.html 本篇以我自己的網站為例來通俗易懂的講述網站的常見漏洞,如何防止網站被入侵,如何讓網站

web安全/滲透測試--30--連結框架注入

1、漏洞描述: 一個框架注入攻擊是一個所有基於GUI的瀏覽器攻擊,它包括任何程式碼如JavaScript、VBScript(ActivX)、Flash、AJAX(html+js+py)。程式碼被注入是由於指令碼沒有對它們正確驗證,攻擊者有可能注入含有惡意內容的

katalon系列十五瀏覽器新增cookie自動登陸

import org.openqa.selenium.Cookieimport org.openqa.selenium.WebDriverimport com.kms.katalon.core.webui.driver.DriverFactory   WebUI.openBrowser('')

web安全手工測試---瀏覽器使用(實驗原理及思路更重要)

1、火狐瀏覽器禁用JS:開啟火狐--->about:config--->javascript.enabled--->切換成false; 2、兩個例子 3、黑掉網站思路:發現漏洞、驗證漏洞、利用漏洞、獲取許可權            保護網站:發現漏洞、

python Web安全防止SQL注入

伴隨著Web2.0、社交網路、微博等一系列新型網際網路產品的興起,基於Web環境的網際網路應用越來越廣泛,Web攻擊的手段也越來越多樣,Web安全史上的一個重要里程碑是大約1999年發現的SQL注入攻擊,之後的XSS,CSRF等攻擊手段愈發強大,Web攻擊的思路也從服務端轉向了客戶端,轉向了瀏覽器和

Web安全實驗4-FTP協議分析實驗

警示:實驗報告如有雷同,雷同各方當次實驗成績均以0分計;在規定時間內未上交實驗報告的,不得以其他方式補交,當次成績按0分計;實驗報告檔案以PDF格式提交。 院系 資料科學與計算機學院 班級 15級4班 學號 15331145 姓名 李果

web安全QQ號快速登入漏洞及被盜原理

為什麼你什麼都沒幹,但QQ空間中卻發了很多小廣告?也許你的QQ賬號已經被盜。本文將講解一個QQ的快速登入的漏洞。 我前陣子在論壇上看到一個QQ的快速登入的漏洞,覺得非常不錯,所以把部分原文給轉到園子來。 而利用這個漏洞最終可以實現,只要你點選一個頁面或執行過一個程式,

在java的WEB專案如何防止瀏覽器直接開啟下載的檔案

 java的web專案防止瀏覽器直接開啟下載的檔案,在web.xml檔案中配置mime下載檔案型別就可以了,配置的示例: <mime-mapping> <extension>doc</extension> <mime-type&

web安全防範點選劫持的兩種方式

防範點選劫持的兩種方式 什麼點選劫持?最常見的是惡意網站使用 <iframe> 標籤把我方的一些含有重要資訊類如交易的網頁嵌入進去,然後把 iframe 設定透明,用定位的手段的把一些引誘使用者在惡意網頁上點選。這樣使用者不知不覺中就進行了某些不安全的操作。 有兩

Web安全實驗1-網路掃描實驗

警示:實驗報告如有雷同,雷同各方當次實驗成績均以0分計;在規定時間內未上交實驗報告的,不得以其他方式補交,當次成績按0分計;實驗報告檔案以PDF格式提交。 院系 資料科學與計算機學院 班級 15級4班 學號 15331145 姓名 李果

防止瀏覽器記住用戶名及密碼的簡單實用方法

inpu 事件 http asc col type 屬性 ash 解決 很多瀏覽器都有自動填寫功能,我在input上使用了autocomplete="off",但在有的瀏覽器上還是被記住了用戶名跟密碼,請問有沒有更有效及簡便的方法來防止瀏覽器記住用戶名及密碼。 如何設置能

Linux常用操作命令(7)date命令顯示設置系統日期時間

Linux 日期 date 8.7 《Linux學習並不難》Linux常用操作命令(7):date命令顯示或設置系統日期和時間 使用date命令可以顯示和設置計算機系統的日期和時間。只有超級用戶才有權限使用date命令設置 日期和時間,而一般用戶只能使用date命令顯示日期和時間。

專案總結3ionic3開發的App在啟動過程中部分手機出現白屏黑屏問題之終極解決方案

問題場景:採用ionic3開發的App,當專案比較大的時候,會出現部分真機裝置在啟動的過程中有白屏或黑屏的情況。 原因預測:個別手機,尤其是安卓手機的效能比較差,App在啟動後進入首頁或登入頁前的初始化工作還沒有完成。 方案總結:在網上查過很多資料發現大部分的解決辦法都是

react中解決火狐瀏覽器,360瀏覽器記住密碼,首次input密碼框不能置為空的bug的終極解決方案

密碼 操作 方案 tdi ted 原理 idm bubuko inpu 先直接上核心代碼如下: 在火狐瀏覽器,360瀏覽器,初次加載,bug長這樣: 如果你想通過生命周期componentDidMounted等生命周期進行置空操作都是不行的,這可能是瀏覽

webpack漸入佳境系列一webpack環境配置與打包基礎【附帶各種 "坑" 與解決方案!持續更新中...】

utf 環境配置 lan 配置 要求 完全 需要 構建 樣式 首先介紹傳統模塊化開發的主流方案: 1.基與CMD的sea.js,玉伯提出的解決方案,據說原來京東團隊在使用。用時才定義,就近加載。最近在瀏覽seajs官方文檔時發現seajs的域名已經在轉賣,驚恐萬分之余又想

node js實戰帶數據庫,加密的註冊登錄

settings else input 是否 rip dig code setting 個人 demo 註冊效果: 登陸效果: 數據庫截圖: 數據庫操作 db.js //這個模塊裏面封裝了所有對數據庫的常用操作 var MongoClient =