ブラウザの「パスワードを保存」機能を無効にする


423

政府の医療機関で働く喜びの1つは、PHI(保護された健康情報)の扱いに関するパラノイアのすべてに対処しなければならないことです。誤解しないでください。私はすべての人の個人情報(健康、経済、サーフィンの習慣など)を保護するために可能な限りのことをしますが、時々人々は少しびくびくしています。

適例:ある州の顧客の1人が、パスワードを保存するための便利な機能がブラウザーに備わっていることを最近知りました。それはしばらくの間存在し、完全にオプションであり、使用するかどうかの賢明な決定であるかどうかを決定するのはエンドユーザー次第であることは誰もが知っています。ただし、現時点では多少の騒動があり、サイトでその機能を無効にする方法を見つけることが求められています。

質問:サイトがブラウザにパスワードを記憶させないように指示する方法はありますか?私は長い間Web開発に携わってきましたが、これまでに遭遇したことはありません。

どんな助けでもありがたいです。


6
人々が再び有効にできるように、グリースモンキースクリプトを提供する必要があります。ユーザーが毎回パスワードを入力することを強制されることを好むとは思わない...
ThiefMaster

14
この質問は、有用で明確であることに対する賛成に値します。一方、私は人々にこの「問題」の解決策を見つけてほしくない。
Ian Boyd

11
これは必ずしも「問題」ではありません。ここに来たのは、Firefoxがログインユーザー名/パスワードフォームではなく、WiFi / SSIDパスワードを含むフォームのパスワードを保存するように要求するためです。それは非常に迷惑であり、私はそれを止めたいです。
2014

1
情報が非常に重要な場合は、パスワードだけで保護する必要はありません。
Sam Watkins

動作しているように見える1つの方法は、<form>を使用しないことです。JavaScriptを使用してデータ(XHR)を送信する場合は、必要ありません。「ワンタイムパスワード」認証を使用するシステムで無効にしたかった(それを保存する理由はない)ユーザー/パス認証の場合、その機能を無効にすることはお勧めしません。
lepe 2016年

回答:


322

すべてのブラウザで機能するかどうかはわかりませんが、フォームでautocomplete = "off"を設定してみてください。

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">

フォームとパスワードの保存プロンプトを無効にし、フォームデータがセッション履歴にキャッシュされないようにする最も簡単で最も簡単な方法は、オートコンプリートフォーム要素の属性を "off"の値で使用することです。

http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletionから

いくつかのマイナーな研究はこれがIEで機能することを示していますが、私は保証を残しません;)

@Joseph:実際のマークアップでXHTML検証に合格することが厳密な要件である場合(理由がわからない場合)後で理論的にこの属性をjavascriptで追加できますが、その後jsを無効にしたユーザー(おそらく無視できる量のユーザーベース)または、サイトでjsが必要な場合はゼロ)でもパスワードは保存されます。

jQueryの例:

$('#loginForm').attr('autocomplete', 'off');

48
簡単なコメントです。これは変更されているため、HTML5は仕様にautocomplete属性を追加しているため、現在は有効です。
タイラーエジェト2011年

11
ちなみに、マイクロソフトはInternet Explorer 11がフィールドを尊重autocomplete="off"しないことを決定しましたinput type="password"msdn.microsoft.com/en-us/library/ie/ms533486%28v=vs.85%29.aspx
JW Lim

6
@JWLimがIE 11でパスワード保存機能を無効にするためのサポートをやめると述べたように、Firefoxも同様です。 bugzilla.mozilla.org/show_bug.cgi?id=956906
グレゴリーコスモハウン

3
Firefox(残念ながら)はMicrosoftのリードに従い、オートコンプリートのサポートも「削除」しました。詳細については、次の問題のディスカッションのコメント100を参照してください。bugzilla.mozilla.org
Bouncing Bit

8
現在、Firefox 38以降では機能しませんmozilla.org/en-US/firefox/38.0/releasenotes
Illuminator

44

に加えて

autocomplete="off"

使用する

readonly onfocus="this.removeAttribute('readonly');"

入力のためにあなたは彼らがフォームデータ(覚えてしたくないことをusernamepassword以下に示すように、など):

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

最新の主要なブラウザのIEのバージョンでテストされGoogle ChromeMozilla FirefoxMicrosoft Edge、などと魔法のように動作します。お役に立てれば。


2
@MuratYıldız:私は同じものを実装する必要があり、私はあなたのコードを追跡しました。ありがとうございました !
2016

1
@Sree私はそれはあなたのために有用であったことをうれしく思います:)
ミュラユルドゥズ

3
Mozilla Firefox 52.0Google Chrome 57.0Microsoft Edge 38.1をテストし、魅力的に動作しました!
MuratYıldızMar

1
Safariモバイルでエラーが発生する可能性があります。これは、この回答がエラーを修正しているためです。stackoverflow.com
questions/2530/

1
Windows Firefox 57.0.2(64ビット)では、これを実装した後もパスワードを保存するように勧められています。
Panu Haaramo 2017

37

私はこの問題に独特のひねりを加えて、しばらくの間この問題に取り組んでいました。特権ユーザーは、保存されたパスワードを機能させることができませんでしたが、通常のユーザーはそれを必要としていました。つまり、特権ユーザーは2回ログインする必要があり、2回目は保存されたパスワードを強制しませんでした。

この要件ではautocomplete="off"、最初のログインからパスワードが保存されている可能性があるため、すべてのブラウザで標準の方法が機能するわけではありません。同僚は、パスワードフィールドが新しいパスワードフィールドでフォーカスされている場合に、そのパスワードフィールドを置き換えてから、新しいパスワードフィールドにフォーカスする(同じイベントハンドラーをフックする)ソリューションを見つけました。これは機能しました(ただし、IE6で無限ループが発生しました)。多分それを回避する方法があったが、それは私に片頭痛を引き起こしていた。

最後に、ユーザー名とパスワードだけをフォームの外に表示するようにしました。驚いたことに、これはうまくいきました!IE6、およびLinux上のFirefoxとChromeの現在のバージョンで動作しました。私はそれをさらにテストしていませんが、すべてのブラウザーではないにしてもほとんどのブラウザーで機能すると思われます(ただし、フォームがなくても気にならなかったブラウザーがそこにあったとしても驚かないでしょう)。

以下は、サンプルコードと、それを機能させるためのjQueryです。

<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>

<form id="theForm" action="/your/login" method="post">
  <input type="hidden" id="hiddenUsername" name="username"/>
  <input type="hidden" id="hiddenPassword" name="password"/>
  <input type="submit" value="Login"/>
</form>

<script type="text/javascript" language="JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

1
それは良い解決策のように見えます。送信するフォーム自体にはパスワードが含まれていないため、これは理にかなっています。最初のフォームは、すべてのブラウザでユーザー名とパスワードが確実に表示されるようにするためのものです。
Alexis Wilke

3
私はあなたのソリューションが好きで、私のサイトに同様のものを実装しましたが、今日、ブラウザがこれを解決する簡単な方法を提供していないのはばかげています。
AgelessEssence 2014年

私がjquery 1.6を使用していることが原因であるかどうかはわかりませんが、上記のjqueryは$(document).ready(function(){});内にラップした後にのみ機能しました
rgbflawed 2014年

一部のブラウザはautocomplete = "off"を受け入れないため、唯一正しい正解はこれです。
Abadis

1
私はちょうど、クロム、オペラおよびInternet Explorerにこの方法を試してみた、それが動作しているようですが、それはunforuntately Firefoxで動作しません
chenks

29

まあ、それは非常に古い投稿ですが、それでも私のチームが長い間達成しようとしてきた解決策を提供します。フォーム内に新しいinput type = "password"フィールドを追加してdivでラップし、divを非表示にしました。このdivが実際のパスワード入力の前にあることを確認しました。これは私たちにとってはうまくいき、パスワードを保存するオプションはありませんでした

プランク-http : //plnkr.co/edit/xmBR31NQMUgUhYHBiZSg?p= preview

HTML:

<form method="post" action="yoururl">
      <div class="hidden">
        <input type="password"/>
      </div>
      <input type="text" name="username" placeholder="username"/>
      <input type="password" name="password" placeholder="password"/>
    </form>

CSS:

.hidden {display:none;}

1
この方法と非表示の入力を使用する方法の1つの利点は、この方法ではパスワードがプレーンテキストフィールドに保存されないことです
pvgoddijn

@ whyAto8これはChrome 47.0.2526.111では機能しませんでした...機能させるコツは、非表示のdivに別のフィールドテキストを追加することでした。ブラウザはパスワードの保存を要求しますが、「このクレデンシャルを保存してもよろしいですか?」と表示されます。次に、空白のユーザー名と空白のパスワードが表示されます。これはうまくいきました。
DavidBélanger16年

1
whyAto8のソリューションと@DavidBélangerのコメントがうまく機能しました(他のソリューションでは機能しませんでした)。また、データ入力に実際に使用されるフィールドの前に2つの空白の非表示フィールドを追加し、複製された(非表示の)フィールドの名前がそれぞれ同じであることにも言及する必要があります。このように、Chrome(48.0.2564.103)は、パスワードを保存する必要があるかどうかさえ尋ねませんでした。
Vadim

この組み合わせはChrome 48.0.2564.116では機能しません。DavidBelangerのコメントと組み合わせても、[OK]をクリックすると、パスワードの保存を求めるChromeポップアップがパスワードをキャッシュします
ChrisO

すばらしい回答.. 「このdivが実際のパスワード入力の前にあることを確認してください」と言った理由を教えてください。私はその実際のパスワード入力の後にそのdivを置きましたが、それでも機能します。
マーティンAJ

16

各ショーのパスワードフィールドに使用される名前をランダム化することにより、ブラウザがフォームを照合しないようにすることができます。そして、ブラウザは同じURLのパスワードを見ているが、それはだ確認することはできません同じパスワード。多分それは何か他のものを制御しています。

更新:他の人が指摘する理由により、これはオートコンプリートや他の戦術使用することに加えて、それらの代わりではないこと注意してください。

また、これはブラウザがパスワードを自動入力するのを妨げるだけであることにも注意してください。ブラウザが使用することを選択したセキュリティの任意のレベルにパスワードを保存することを妨げません。


5
[@Joel](#32409)フォームが自動入力されないようにするかもしれませんが、ブラウザがこの想定される新しいフォームのパスワードを保存するように要求するのを防ぐでしょうか?
ジョセフペコラロ

3
私はこれが今うまくいくとは思わない。FF 13では、いくつかのパスワードフィールドがあり、すべて異なる名前のフォームがあります。FF、そのページのパスワードを保存すると、保存したパスワードがすべてのパスワードフィールドに挿入されます。フィールドの名前は関係ありません(たとえば、「new_password」と「old_password」があり、保存されたパスワードが両方にダンプされます)。この特定のフォームでは、パスワードを保存するためのユーザー名がありません-違いが生じる場合に備えて、2つのパスワードフィールドのみです。
Jason

1
たびにそれを埋めるために、ブラウザの試みを倒すために何もしなかったパスワードフィールドに名前のための新しいUUIDを与えてうなずき@Jason、。
FP自由に

14

実際の2要素認証を使用して、ユーザーのブラウザキャッシュよりも多くの場所に格納される可能性があるパスワードへの唯一の依存を回避します。


2
ところで、それは認証ではなく認証です
ジョナサン。

26
@ジョナサン・ピティ、私は認証を
イアン・ボイド

別の解決策は、JavaScriptを実装することです。これは、ユーザーがアプリケーションからログアウトするとブラウザーを強制的に閉じるものです。これにより、ブラウザのメモリ全体がフラッシュされるため、ブラウザのメモリからデータを取得できません。
Ajay Takur

13

最もクリーンな方法はautocomplete="off"タグ属性を使用することですが、タブでフィールドを切り替えると、Firefoxは適切にそれに従いません。

これを防ぐ唯一の方法は、偽の隠しパスワードフィールドを追加して、ブラウザにパスワードを入力させることです。

<input type="text" id="username" name="username"/>
<input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
<input type="password" id="password" autocomplete="off" name="password"/>

ブラウザーの動作を変更するため、これは醜いハックです。これは悪い習慣と見なされるべきです。本当に必要な場合にのみ使用してください。

注:FFは#prevent_autofill(空の)の値を「保存」し、そこに保存されているパスワードを入力しようとするため、これはパスワードの自動入力を効果的に停止しますtype="password"。入力。


ブラウザーがパスワードを入力するのを防ぎ、それを保存することを許可する意味は何ですか?ユーザーをだまして、実際に脆弱な間はパスワードが保存されていないと考えさせるだけです。
CodesInChaos 2015

この方法では、FFによって無視される他のボックスに入力するため、実際にはパスワードが保存されません。代わりに、空の文字列を格納します。
venimus

@CodesInChaos IMHO懸念が無効であるため、反対票を再検討する必要があります
venimus

12

すべての主要なブラウザーでフォームタグにautocomplete = "off"を追加することをテストしました。実際、これまでにIE8を使用している米国のほとんどの人々。

  1. IE8、IE9、IE10、Firefox、Safariは正常に動作します。

    ブラウザが「パスワードの保存」を要求しない。また、以前に保存されたユーザー名とパスワードが入力されていません。

  2. ChromeおよびIE 11はautocomplete = "off"機能をサポートしていません
  3. autocomplete = "off"をサポートするFF。ただし、既存の保存された資格情報が入力される場合があります。

2014年6月11日に更新

最後に、以下はJavaScriptを使用したクロスブラウザーソリューションであり、すべてのブラウザーで正常に動作しています。

ログインフォームの「フォーム」タグを削除する必要があります。クライアント側の検証後、その資格情報を非表示の形式にして送信します。

また、2つのメソッドを追加します。1つは検証用の「validateLogin()」、もう1つはテキストボックス/パスワード/ボタン「checkAndSubmit()」でEnterをクリックしながらEnterイベントをリッスンするためのものです。ログインフォームにはフォームタグがないため、ここではイベントを入力しないでください。

HTML

<form id="HiddenLoginForm" action="" method="post">
<input type="hidden" name="username" id="hidden_username" />
<input type="hidden" name="password" id="hidden_password" />
</form>

Username: <input type="text" name="username" id="username" onKeyPress="return checkAndSubmit(event);" /> 
Password: <input type="text" name="password" id="password" onKeyPress="return checkAndSubmit(event);" /> 
<input type="button" value="submit" onClick="return validateAndLogin();" onKeyPress="return checkAndSubmit(event);" /> 

Javascript

//For validation- you can modify as you like
function validateAndLogin(){
  var username = document.getElementById("username");
  var password = document.getElementById("password");

  if(username  && username.value == ''){
    alert("Please enter username!");
    return false;
  }

  if(password && password.value == ''){
    alert("Please enter password!");
    return false;
  }

  document.getElementById("hidden_username").value = username.value;
  document.getElementById("hidden_password").value = password.value;
  document.getElementById("HiddenLoginForm").submit();
}

//For enter event
function checkAndSubmit(e) {
 if (e.keyCode == 13) {
   validateAndLogin();
 }
}

幸運を!!!


この回答は有用な情報を提供しますが、ブラウザがパスワードを保存しないようにする方法の質問には実際には回答しません。
JWリム2014年

@JW Lim、私は答えを更新しました。調べてみてください。ありがとう!
Asik

@ Sivakumar、OK OSとSafariのバージョンを含めてください。他の人が同じことを知っているように。それは私のシステム(windows 8、Safary 5)で機能していました
Asik

@Asik Safari 8.0.3およびMac OS 10.10
Sivakumar

7

そうではない-あなたが現実的にできる唯一のことは、サイトでアドバイスを提供することです。おそらく、初めてサインインする前に、ブラウザにパスワードを保存することを推奨しないことを示す情報をフォームに表示できます。

その後、ユーザーはすぐにアドバイスに従い、付箋にパスワードを書き留め、モニターに貼り付けます。


10
これは政府のサイトであることを覚えておく必要があり、そのようなことは政治的に起訴されています。高位の人が「このように機能してはならない」と言った場合、現実的なものは方程式の一部ではありません。問題はポストイットノートに移動する可能性がありますが、それらのポリシーは別の部門が処理することです-問題は移動しました;-)そして、私は実際に深刻です。
Jason

6

私がやっていることは、javascript / jQueryを使用してautocomplete = "off"とパスワードフィールドをクリアすることの組み合わせです。

jQueryの例:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

を使用setTimeout()すると、ブラウザがフィールドをクリアするまで待ってからフィールドをクリアできます。そうしないと、フィールドをクリアした後、ブラウザは常にオートコンプリートします。


3

autocomplete = "off"が機能しない場合... formタグを削除し、代わりにdivタグを使用してから、jqueryを使用してフォームの値をサーバーに渡します。これでうまくいきました。


3

autocomplete = "off"はパスワードフィールドでは機能しないため、JavaScriptを使用する必要があります。ここにある答えに基づいた簡単な解決策があります。

属性data-password-autocomplete = "off"をパスワードフィールドに追加します。

<input type="password" data-password-autocomplete="off">

次のJSを含めます。

$(function(){
    $('[data-password-autocomplete="off"]').each(function() {
        $(this).prop('type', 'text');
        $('<input type="password"/>').hide().insertBefore(this);
        $(this).focus(function() {
            $(this).prop('type', 'password');
        });
    });     
});

このソリューションはChromeとFFの両方で機能します。


Windows Firefox 57.0.2(64ビット)では、これを実装した後もパスワードを保存するように勧められています。
Panu Haaramo 2017

2

「オートコンプリート」属性はほとんどの場合機能しますが、パワーユーザーはブックマークレットを使用してそれを回避できます。

ブラウザーにパスワードを保存させると、キーロギングに対する保護が実際に高まるため、おそらくブラウザーでパスワードを保存し、マスターパスワード(少なくともFirefoxでは)で保護するのが最も安全なオプションです。


2
「しかし、パワーユーザーはそれを回避することができます」 -それはほとんどのアプリケーション機能に適用可能であり、ウェブであるかどうかにかかわらず、システムを制限する理由にはなりません。ポストイットにパスワードを書き込んでモニターに表示することもできます。アプリケーションの観点から見ると、セキュリティのためだけに行うことができ、意味のあるデフォルトの動作(ローカルに保存しない)を提供することから始まります。
Niels Keurentjes、2014年

2

回避できる回避策があります。

カスタムフォントハックを作成できます。したがって、すべての文字をドット/サークル/スターなどのカスタムフォントにしてください。これをWebサイトのカスタムフォントとして使用します。これをinkscapeで行う方法を確認してください:独自のフォントを作成する方法

次に、フォームにログインして使用します:

<form autocomplete='off'  ...>
   <input type="text" name="email" ...>
   <input type="text" name="password" class="password" autocomplete='off' ...>
   <input type=submit>
</form>

次に、CSSを追加します。

@font-face {
    font-family: 'myCustomfont';
    src: url('myCustomfont.eot');
    src: url('myCustomfont?#iefix') format('embedded-opentype'),
         url('myCustomfont.woff') format('woff'),
         url('myCustomfont.ttf') format('truetype'),
         url('myCustomfont.svg#myCustomfont') format('svg');
    font-weight: normal;
    font-style: normal;

}
.password {
  font-family:'myCustomfont';
}

プリティクロスブラウザ互換。IE6 +、FF、Safari、Chromeを試しました。変換するoetフォントが破損しないことを確認してください。それが役に立てば幸い?


1
本当にきちんとした解決策ここに
アンドリュー2014年

6
このようなソリューションを使用する場合、ユーザーはこの類似したパスワードフィールドに入力されたテキストを自由にコピーできることを考慮する必要があります。実際のパスワードフィールドでは、コピーおよび切り取り機能は無効になっています。

2

この問題を解決する最も簡単な方法は、FORMタグの外側にINPUTフィールドを配置し、FORMタグの内側に2つの非表示フィールドを追加することです。次に、送信イベントリスナーで、フォームデータがサーバーに送信される前に、表示されている入力から非表示の入力に値をコピーします。

次に例を示します(フォームアクションが実際のログインスクリプトに設定されていないため、ここでは実行できません)。

<!doctype html>
<html>
<head>
  <title>Login & Save password test</title>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

  <body>
      <!-- the following fields will show on page, but are not part of the form -->
      <input class="username" type="text" placeholder="Username" />
      <input class="password" type="password" placeholder="Password" />

      <form id="loginForm" action="login.aspx" method="post">
        <!-- thw following two fields are part of the form, but are not visible -->
        <input name="username" id="username" type="hidden" />
        <input name="password" id="password" type="hidden" />
        <!-- standard submit button -->
        <button type="submit">Login</button>
      </form>

    <script>
      // attache a event listener which will get called just before the form data is sent to server
      $('form').submit(function(ev) {
        console.log('xxx');
        // read the value from the visible INPUT and save it to invisible one
        // ... so that it gets sent to the server
        $('#username').val($('.username').val());
        $('#password').val($('.password').val());
      });
    </script>

  </body>
</html>


Windows Firefox 57.0.2(64ビット)では、これを実装した後もパスワードを保存するように勧められています。
Panu Haaramo 2017

ええと、これは単なるハックであり、いつでも機能しなくなる可能性があります:)
knee-cola

これは最良の選択です!送信する前にパスワードフィールドをクリアしてください:$( '
。password

2

私のjs(jquery)の回避策は、フォームの送信時にパスワードの入力タイプをテキストに変更することです。パスワードが一瞬表示される可能性があるため、その直前の入力も非表示にします。ログインフォームには使用しませんが、たとえば、Webサイトの管理部分内で(autocomplete = "off"と一緒に)役立ちます。

フォームを送信する前に、これを(jqueryを使用して)コンソール内に配置してみてください。

$('form').submit(function(event) {
    $(this).find('input[type=password]').css('visibility', 'hidden').attr('type', 'text');
});

Chrome 44.0.2403.157(64ビット)でテスト済み。


1
これは実際に機能します。これにより、ブラウザがパスワードを保存できなくなります。パスワードが表示されないようにするには、非表示のdivで入力フィールドをラップします。そして、DOMが読み込まれていれば、これを既に行うことができます。フォームを送信するまで待つ必要はありません。
フェリークラネン

IE 11.0.9600.18161で動作します!
Lu55、2016

それは本当です。今私はFF 44.0.2でこれを試しました、そしてこのハックはもう機能しません...なんて残念です。Chromeではこれでも機能します。
ovalek

input [type = submit]またはbutton [type = submit]を通常のbutton [type = button]に置き換えて、onclickハンドラーでこれを行うことができます。[type = submit]がフォームに存在しない場合、フォームがEnterキーで送信されず、パスワードの保存プロンプトが表示されなくなります。
スティーブンドン

2

たくさんのソリューションをテストしました。動的パスワードフィールド名、複数のパスワードフィールド(偽のフィールドでは非表示)、入力タイプを「テキスト」から「パスワード」に変更、autocomplete = "off"、autocomplete = "new-password"、...しかし、最近は何も解決されていませんブラウザ。

パスワードの記憶をなくすために、最終的にパスワードを入力フィールドとして扱い、入力したテキストを「ぼかし」ます。

入力したテキストを選択するとクリアテキストとして表示されるため、ネイティブパスワードフィールドよりも「安全」ではありませんが、パスワードは記憶されません。また、Javascriptがアクティブになっていることにも依存します。

ナビゲーターの以下の提案対パスワード記憶オプションを使用するリスクを推定する必要があります。

パスワードの記憶はユーザーが管理(サイトごとに無効化)できますが、「パブリック」または共有コンピューターではなく、パーソナルコンピューターでは問題ありません。

私の場合は、共有コンピューターで実行されているERPの場合なので、以下の解決策を試してみます。

<input style="background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name="password" size="10" maxlength="30" onfocus="this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress="this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete="off" type="text">

1

マーカスは素晴らしいポイントを上げました。私はautocomplete属性を調べることに決めて、以下を得ました:

この属性を使用することの唯一の欠点は、標準ではないこと(IEおよびMozillaブラウザーで機能する)、XHTML検証が失敗することです。これは、検証を中断するのが妥当な場合だと思います。 ソース

だから私はそれが全面的に100%動作しないが主要なブラウザで処理されるのでそれは素晴らしい解決策であると言わざるを得ないでしょう。


私はw3c標準に従って検証するというこの問題を抱えています。肝心なのは、この機能をモバイルバンキングのウェブサイトに追加したいということです。私は、モバイルブラウザーは十分に厳格であり、無効な属性が使用されているとフォームを台無しにする可能性があると想定しています。この場合、何を勧めますか?
asgs

2
それは古い考え方だと思います。最近の多くのモバイルブラウザーはWebKitから構築されており、この属性をサポートするか、優雅に無視します。他の国々や古い携帯電話のブラウザがこれをどのように処理するかは知りませんが、既知の属性/要素を適切に処理することは、優れたブラウザの基本です。これは、Webの進化に伴ってブラウザが壊れないようにする「将来の証拠」です。遅れる可能性があります(新しい機能を実装しない)が、壊れることはありません。=)
Joseph Pecoraroが

1
質問そのものへの回答ではなく、参照された回答へのコメントである必要があります。
viam0Zah 2010

1

私は上記を試しましたがautocomplete="off"、何も成功しました。角度jsを使用している場合、ボタンとng-clickを使用することをお勧めします。

<button type="button" class="" ng-click="vm.login()" />

これは、誰かが私のメカニズムで受け入れることができる受け入れられた回答で問題を解決できない場合、これを追加してすでに受け入れられた回答を持っています。

質問と回答をありがとう。


これは明らかに、フォームを送信するためにenterまたはreturnキーを押すことを壊します。
8eecf0d2

0

私が知っている1つの方法は、(たとえば)JavaScriptを使用して、フォームを送信する前にパスワードフィールドから値をコピーすることです。

これの主な問題は、ソリューションがJavaScriptに関連付けられていることです。

また、JavaScriptに関連付けることができる場合は、サーバーにリクエストを送信する前にクライアント側でパスワードをハッシュすることもできます。


クライアント側のハッシュは、サーバー側のハッシュに代わるものではありません。それが少しでも助けになるかどうかは不明です(追加で行う場合)。
ブリリアント

2
クライアント側でハッシュを許可すると危険です。これは、攻撃者がハッシュからパスワードを解読する必要がないため、ハッシュを使用してログインできるためです。ハッシュはパスワードと同等になります。
rjmunro 2012

クライアントのハッシュは、データベースにパスワードを保存する前にサーバーにもハッシュがある場合にのみ有用であることをBrilliandに同意します。ただし、クライアント側でハッシュを使用すると、中間の男性の問題をある程度解決できます。つまり、ハッカーは(少なくともパブリックサイトでは)コードを利用できるため、おそらく見た目ほど便利ではありません。
Alexis Wilke

0

本当の問題は、単にHTMLに属性を追加することよりもはるかに深いものです。これは一般的なセキュリティの問題であり、そのためにセキュリティのためにハードウェアキーやその他のクレイジーなものが発明されました。

すべてのブラウザーで完全に機能するautocomplete = "off"があるとします。それはセキュリティに役立ちますか?もちろん、違います。ユーザーは自分のパスワードを教科書やモニターに貼られたステッカーに書き留めて、すべてのオフィスの訪問者がそれらを見ることができるようにし、デスクトップなどのテキストファイルに保存します。

一般に、WebアプリケーションとWeb開発者は、エンドユーザーのセキュリティについて一切責任を負いません。エンドユーザーは自分自身のみを保護できます。理想的には、すべてのパスワードを頭に留め、忘れた場合に備えてパスワードリセット機能(または管理者に連絡)を使用する必要があります。そうしないと、常にパスワードが見られ、何らかの方法で盗まれるリスクがあります。

したがって、ハードウェアキーを使用したクレイジーなセキュリティポリシー(一部の銀行は、基本的に2要素認証を採用するインターネットバンキングを提供しています)を持っているか、または基本的にセキュリティがありません。もちろん、これは少し誇張されています。何から保護しようとしているのかを理解することが重要です。

  1. 許可されていないアクセス。基本的には、最も単純なログインフォームで十分です。ランダムなセキュリティの質問、CAPTCHA、パスワードの強化など、追加の対策が行われることがあります。
  2. 資格情報の盗聴。人々が公共のWi-FiホットスポットなどからWebアプリケーションにアクセスする場合、HTTPSは必須です。HTTPSを使用している場合でも、ユーザーは定期的にパスワードを変更する必要があることに言及してください。
  3. インサイダー攻撃。そのような例は2つあります。ブラウザからのパスワードの単純な盗みから始まるか、デスクのどこかに書き留めたもの(ITスキルは必要ありません)から始まり、セッションの偽造とローカルネットワークトラフィックのインターセプト(暗号化されていても)で終わります。さらに別のエンドユーザーと同じように、さらにWebアプリケーションにアクセスします。

この特定の投稿では、問題の性質(エンドユーザーのセキュリティ)のために彼が解決できない開発者に課された不十分な要件を見ることができます。私の主観的なポイントは、開発者は基本的にそのようなタスクに時間を無駄にするのではなく、基本的にNOと言って要件の問題を指摘するべきだということです。これにより、システムの安全性が完全に向上するわけではありません。むしろ、モニターにステッカーが貼られている場合があります。残念ながら、一部のボスは聞きたいものだけを聞きます。ただし、私があなたである場合、実際の問題の原因を説明しようとしますが、autocomplete = "off"は、ユーザーにすべてのパスワードを頭に独占的に保持させない限り、それを解決しません。彼の側の開発者はユーザーを完全に保護することはできません、


0

同じHIPAAの問題に直面し、比較的簡単な解決策を見つけた、

  1. フィールド名を配列として使用して、非表示のパスワードフィールドを作成します。

    <input type="password" name="password[]" style="display:none" />
    
  2. 実際のパスワードフィールドには同じ配列を使用します。

    <input type="password" name="password[]" />
    

ブラウザ(Chrome)から「パスワードの保存」を求められる場合がありますが、ユーザーが[保存]を選択したかどうかに関係なく、次回ログインしたときにパスワードが非表示のパスワードフィールドに自動的に入力されます。

「password [part2]」のように配列を定義してみましたが、まだ覚えていました。最初の場所にドロップする以外に選択肢がないため、インデックスのない配列の場合は、スローされます。

次に、選択したプログラミング言語を使用して配列(PHPなど)にアクセスします。

echo $_POST['password'][1];

1
これでセキュリティの問題を隠しています-パスワードのハッシュはまだブラウザのキャッシュに保存されています。
Alexander Burakevych、2016年

1
明確にしていただけませんか?パスワードはPOSTを使用してプレーンテキストとして送信されます。私が読んだ限り、POSTリクエストはキャッシュできません。POSTを使用してデータを送信する代替手段があるとおっしゃっていますか?または、パスワードはブラウザに保存されていると言いますか?それはパスワードを保存するのではなく、配列の先頭に空の値を保存するためです。このメソッドをテストしましたか?
マイク

0

autocomplete承認された回答を含むほとんどの提案は、今日のWebブラウザーでは機能しない(つまり、Webブラウザーのパスワードマネージャーは無視するautocomplete)ので、より斬新なソリューションはpasswordtext、フィールドタイプ、背景色をテキストの色と一致させることです。ユーザー(またはKeePassのようなプログラム)がパスワードを入力するときに、実際のパスワードフィールドである一方で、パスワードを非表示にし続けるプレーンテキストフィールドです。ブラウザは、プレーンテキストフィールドに保存されているパスワードの保存を要求しません。

このアプローチの利点は、プログレッシブ拡張が可能であるため、フィールドが通常のパスワードフィールドとして機能するためにJavaScriptを必要としないことです(代わりにプレーンテキストフィールドから開始して同じアプローチを適用することもできますが、実際にはHIPAAではありません) PHI / PII準拠)。このアプローチは、必ずしもサーバーに送信されるとは限らない非表示のフォーム/フィールドに依存しません(非表示であるため)。また、これらのトリックのいくつかは、いくつかの最新のブラウザーでも機能しません。

jQueryプラグイン:

https://github.com/cubiclesoft/php-flexforms-modules/blob/master/password-manager/jquery.stoppasswordmanager.js

上記のリンクからの関連するソースコード:

(function($) {
$.fn.StopPasswordManager = function() {
    return this.each(function() {
        var $this = $(this);

        $this.addClass('no-print');
        $this.attr('data-background-color', $this.css('background-color'));
        $this.css('background-color', $this.css('color'));
        $this.attr('type', 'text');
        $this.attr('autocomplete', 'off');

        $this.focus(function() {
            $this.attr('type', 'password');
            $this.css('background-color', $this.attr('data-background-color'));
        });

        $this.blur(function() {
            $this.css('background-color', $this.css('color'));
            $this.attr('type', 'text');
            $this[0].selectionStart = $this[0].selectionEnd;
        });

        $this.on('keydown', function(e) {
            if (e.keyCode == 13)
            {
                $this.css('background-color', $this.css('color'));
                $this.attr('type', 'text');
                $this[0].selectionStart = $this[0].selectionEnd;
            }
        });
    });
}
}(jQuery));

デモ:

https://barebonescms.com/demos/admin_pack/admin.php

メニューの[エントリの追加]をクリックし、ページの一番下までスクロールして[モジュール:パスワードマネージャの停止]を表示します。

免責事項:このアプローチは目の見える人に有効ですが、スクリーンリーダーソフトウェアに問題がある可能性があります。たとえば、スクリーンリーダーはプレーンテキストフィールドを表示するため、ユーザーのパスワードを声に出して読む可能性があります。上記のプラグインを使用すると、他にも予期しない結果が生じる可能性があります。組み込みのWebブラウザー機能の変更は、さまざまな条件とエッジケースをテストして慎重に行う必要があります。


-1

サイトがブラウザにパスワードを記憶させないように指示する方法はありますか?

ウェブサイトはを使用して、パスワードであることをブラウザに通知します<input type="password">。だからあなたがしなければならない場合、Webサイトの観点からこれを行うがあるは、変更する必要があります。(明らかに、これはお勧めしません)。

最善の解決策は、ユーザーがブラウザを設定して、パスワードを記憶しないようにすることです。


3
入力タイプのフィールドを変更しないことをお勧めしますか?セキュリティの問題を詳しく説明しておくと役に立ちます。
Karl、

1
@karl:オープンでパスワードを入力する必要があるため、「ショルダーサーフィン」が可能になるため、入力中に画面を見てパスワードを収集するプロセス。
David Schmitt

人間の肩のサーフィンだけでなく、スパイウェアやウイルスが画面を監視し、プレーンテキストフィールドに入力された内容を確認できます。
Karl

6
@karl:コンピュータにスパイウェア/ウイルスがインストールされている場合、アスタリスクによる保護はありません。インストールされているアプリが「パスワード」フィールドに入力されているものを傍受することは、プレーンテキストフィールドに対して同じことをすることと同じくらい難しいことではありません。
Markus Olsson、2010年

3
また、ブラウザがパスワード入力ではなく通常のテキスト入力を表示する場合、パスワードデータベースの代わりにオートコンプリートデータベースの形式でパスワードを隠している可能性があります。次に、それを提案するか、無関係なWebサイトで自動入力します。だからあなたは実際にあなたが始めたときよりもさらに悪いです。
zwol 2011年

-1

オートコンプリートフラグを信頼したくない場合は、ユーザーがonchangeイベントを使用してボックスに入力することを確認できます。以下のコードは単純なHTMLフォームです。非表示のフォーム要素password_editedは、最初は0に設定されています。passwordの値が変更されると、上部のJavaScript(pw_edited関数)が値を1に変更します。ボタンが押されると、フォームを送信する前に、ここでvalueenterコードをチェックします。このように、ブラウザがあなたを無視してフィールドをオートコンプリートしても、ユーザーはパスワードフィールドに入力しないとログインページを渡すことができません。また、フォーカスが設定されている場合は、パスワードフィールドを必ず空白にしてください。それ以外の場合は、最後に文字を追加し、戻って削除してシステムをだますことができます。さらにautocomplete = "off"をパスワードに追加することをお勧めしますが、この例はバックアップコードの動作を示しています。

<html>
  <head>
    <script>
      function pw_edited() {
        document.this_form.password_edited.value = 1;
      }
      function pw_blank() {
        document.this_form.password.value = "";
      }
      function submitf() {
        if(document.this_form.password_edited.value < 1) {
          alert("Please Enter Your Password!");
        }
        else {
         document.this_form.submit();
        }
      }
    </script>
  </head>
  <body>
    <form name="this_form" method="post" action="../../cgi-bin/yourscript.cgi?login">
      <div style="padding-left:25px;">
        <p>
          <label>User:</label>
          <input name="user_name" type="text" class="input" value="" size="30" maxlength="60">
        </p>
        <p>
          <label>Password:</label>
          <input name="password" type="password" class="input" size="20" value="" maxlength="50" onfocus="pw_blank();" onchange="pw_edited();">
        </p>
        <p>
          <span id="error_msg"></span>
        </p>
        <p>
          <input type="hidden" name="password_edited" value="0">
          <input name="submitform" type="button" class="button" value="Login" onclick="return submitf();">
        </p>
      </div>
    </form>
  </body>
</html>

-1

autocomplete = "off"は、Firefox 31でパスワードマネージャーを無効にするために機能せず、おそらく一部の以前のバージョンでも機能しません。

この問題に関するmozillaでの議論をチェックしてくださいhttps : //bugzilla.mozilla.org/show_bug.cgi?id=956906

2番目のパスワードフィールドを使用して、トークンによって生成されたワンタイムパスワードを入力したいと考えました。現在、パスワード入力の代わりにテキスト入力を使用しています。:-(


-1

多くの試行錯誤の後、以下の解決策が最適であることを発見した後、ブラウザによるログイン名とパスワードの自動入力を無効にする同様のタスクを与えられました。以下のコントロールを元のコントロールの前に追加するだけです。

<input type="text" style="display:none">
<input type="text" name="OriginalLoginTextBox">

<input type="password" style="display:none">
<input type="text" name="OriginalPasswordTextBox">

これはIE11およびChrome 44.0.2403.107で正常に機能しています


-2

autocomplete = "off"は最近のほとんどのブラウザーで機能しますが、Epiphany(GNOMEのWebKitを使用したブラウザー)で正常に機能する別の方法は、ランダムに生成されたプレフィックスをセッション状態(または非表示フィールド)に保存することです。セッション状態の適切な変数)を使用して、フィールドの名前を変更します。Epiphanyは引き続きパスワードを保存したいのですが、フォームに戻るとフィールドに入力されません。


攻撃者がストアからパスワードを抽出するのを妨げない一方で、ユーザーはパスワードが保存されたことをユーザーに見られないため、それらを通常の方法で保存するよりもさらに悪いです。
CodesInChaos

-2

この方法を使用しても問題はありませんでした。

autocomplete = "off"を使用し、非表示のパスワードフィールドを追加してから、非表示でない別のフィールドを追加します。ブラウザは、autocomplete = "off"を尊重しない場合、非表示のオートコンプリートを試みます


-2

別の解決策は、すべての入力が非表示のタイプである非表示フォームを使用してPOSTを作成することです。表示されるフォームは、「パスワード」タイプの入力を使用します。後者のフォームは送信されないため、ブラウザはログインの操作をまったく傍受できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.