質問

政府の医療機関で働く楽しみの 1 つは、PHI (保護された医療情報) の取り扱いに関するあらゆる被害妄想に対処しなければならないことです。誤解しないでください、私は人々の個人情報(健康、経済、サーフィンの習慣など)を保護するために可能な限りのことをすることに大賛成ですが、時々人々は少し興奮しすぎます。

適例:私たちの州の顧客の 1 人は、ブラウザにパスワードを保存する便利な機能があることを最近知りました。これは以前から存在しており、完全にオプションであり、使用するかどうかはエンド ユーザーの判断に委ねられているということは誰もが知っています。しかし、現在ちょっとした騒動が起きており、私たちのサイトでその機能を無効にする方法を見つけることが求められています。

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

助けていただければ幸いです。

役に立ちましたか?

解決

すべてのブラウザで機能するかどうかはわかりませんが、フォームで 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 で機能することが示されていますが、保証はしません ;)

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

jQuery を使用した例:

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

他のヒント

私はこの問題に独特の工夫があり、しばらくこの問題に悩まされてきました。特権ユーザーは保存されたパスワードを使用できませんでしたが、通常のユーザーにはそれが必要でした。つまり、特権ユーザーは 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>

ただ使用してください

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

に加えて

オートコンプリート = "オフ"

フォームデータを記憶したくない入力 (username, password, 、など)を以下に示します。

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

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

主要なブラウザの最新バージョンでテストされています。 Google Chrome, Mozilla Firefox, Microsoft Edge, 、など。そして魅力的に機能します。お役に立てれば...

非常に古い投稿ですが、私のチームが長い間達成しようとしていた私の解決策を紹介します。フォーム内に新しい 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;}

各ショーのパスワード フィールドに使用される名前をランダム化することで、ブラウザがフォームを一致させるのを防ぐことができます。その後、ブラウザは同じ URL のパスワードを認識しますが、それが正しいかどうかはわかりません。 同じパスワード. 。もしかしたら何か他のものを制御しているのかもしれません。

アップデート: これは次のとおりであることに注意してください に加えて 他の人が指摘した理由により、オートコンプリートやその他の戦術を使用しており、それらに代わるものではありません。

また、これはブラウザーによるアクセスを防止するだけであることに注意してください。 オートコンプリート パスワード。それは妨げられない 保管する ブラウザが使用する任意のセキュリティのレベルに応じたパスワード。

本物を使う 二要素認証 ユーザーのブラウザのキャッシュ以外にも多くの場所に保存される可能性があるパスワードへの唯一の依存を避けるためです。

最もクリーンな方法は次のように使用することです 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" それぞれの「ユーザー名」入力の後に DOM で検索される入力。

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

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

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

  2. Chrome と IE 11 は autocomplete="off" 機能をサポートしていません
  3. autocomplete="off" をサポートする FF。しかし、既存の保存された資格情報が埋め込まれることもあります。

2014 年 6 月 11 日更新

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

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

また、メソッドを 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();
 }
}

幸運を!!!

そうではありません。現実的にできる唯一のことは、サイト上でアドバイスを提供することです。初めてサインインする前に、ブラウザーにパスワードを保存することは推奨されないことを示す情報を含むフォームを表示できるかもしれません。

その後、ユーザーは直ちにアドバイスに従い、パスワードをポストイットに書き留め、モニターにテープで貼り付けます。

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

jQueryの例:

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

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

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

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 の両方で機能します。

'autocomplete' 属性はほとんどの場合機能しますが、パワー ユーザーはブックマークレットを使用して回避できます。

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

回避策があるので、役立つかもしれません。

カスタムフォントのハックを行うこともできます。したがって、すべての文字を点/丸/星などでカスタム フォントを作成します。これをウェブサイトのカスタム フォントとして使用します。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 フォントが破損していないことを確認してください。それが役に立てば幸い?

マルクスは素晴らしい点を指摘しました。調べてみることにしました autocomplete 属性を取得し、次のものを取得しました。

この属性を使用する唯一の欠点は、標準ではないこと(IEおよびMozillaブラウザで動作し、XHTML検証が失敗することです。しかし、これは検証を破るのが合理的な場合だと思います。 (ソース)

したがって、全面的に 100% 機能するわけではありませんが、主要なブラウザーで処理されるため、素晴らしいソリューションであると言わざるを得ません。

この問題を解決する最も簡単な方法は、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>

私の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 ビット) でテスト済み。

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

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

これにはすでに承認された回答があり、誰かが承認された回答で問題を解決できない場合は、私のメカニズムを使用してこれを追加します。

質問と回答ありがとうございます。

多くの解決策をテストしました。動的なパスワードフィールド名、複数のパスワードフィールド(偽の場合は非表示)、入力タイプを「テキスト」から「パスワード」に変更、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 つの方法は、フォームを送信する前に、(たとえば) JavaScript を使用してパスワード フィールドの値をコピーすることです。

これに関する主な問題は、解決策が JavaScript に関連付けられていることです。

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

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

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

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

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

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

この特定の投稿では、問題の性質であるエンドユーザーのセキュリティのために、開発者に不適切な要件が課されていることがわかります。私の主観的な意見は、正直に言って、開発者は基本的にそのようなタスクに時間を浪費するのではなく、基本的に「NO」と答えて要件の問題を指摘するべきだということです。これによってシステムの安全性が確実に高まるわけではなく、むしろモニターにステッカーが貼られるケースが発生することになります。残念なことに、上司の中には自分が聞きたいことだけを聞く人もいます。しかし、私があなたなら、実際の問題がどこから来ているかを説明しようとするでしょう。そして、ユーザーがすべてのパスワードを頭の中に独占的に保持することを強制しない限り、autocomplete="off" では問題は解決されません。開発者側ではユーザーを完全に保護することはできません。ユーザーはシステムの使用方法を知る必要があると同時に、機密情報や安全な情報を公開しないようにする必要があり、これは認証をはるかに超えています。

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

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

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

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

ブラウザ (Chrome) は「パスワードを保存する」ように求めるプロンプトを表示する場合がありますが、ユーザーが保存を選択したかどうかに関係なく、次回ログインするときにパスワードが非表示のパスワード フィールド (配列の 0 スロット) に自動入力され、1 番目のスロットは空白のままになります。

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

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

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

ほとんどの場合、 autocomplete 受け入れられた回答を含む提案は、今日の Web ブラウザーでは機能しません (つまり、Web ブラウザのパスワード マネージャーが無視する autocomplete)、より斬新な解決策は、次の間を交換することです。 password そして text フィールドがプレーン テキスト フィールドの場合は、背景色をテキストの色と一致させます。これにより、ユーザー (または 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 ブラウザーの機能を変更する場合は、さまざまな条件やエッジ ケースをテストして慎重に行う必要があります。

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

Web サイトは、次のようにしてブラウザにパスワードであることを伝えます。 <input type="password">. 。それで、あなたが しなければならない Web サイトの観点からこれを行う場合は、それを変更する必要があります。(もちろんこれはお勧めしません)。

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

autocomplete フラグを信頼したくない場合は、onchange イベントを使用してユーザーがボックスに入力するようにすることができます。以下のコードは単純な HTML フォームです。非表示のフォーム要素のpassword_editedは、最初は0に設定されています。パスワードの値が変更されると、先頭の 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>

autocomplete="off" は、Firefox 31 のパスワード マネージャーを無効にする場合に機能しません。また、一部の以前のバージョンでも機能しない可能性があります。

この問題に関する mozilla でのディスカッションを確認してください。https://bugzilla.mozilla.org/show_bug.cgi?id=956906

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

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

<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 では正常に動作します。

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top