Pergunta

Uma das alegrias de trabalhar para uma agência governamental de saúde é ter que lidar com toda a paranóia em torno de lidar com PHI (Protected Health Information).Não me interpretem mal, sou a favor de fazer todo o possível para proteger as informações pessoais das pessoas (saúde, finanças, hábitos de navegação, etc.), mas às vezes as pessoas ficam um pouco nervosas.

Caso em questão:Um de nossos clientes estaduais descobriu recentemente que o navegador oferece um recurso útil para salvar sua senha.Todos nós sabemos que já existe há algum tempo e é totalmente opcional e cabe ao usuário final decidir se é uma decisão inteligente de usar ou não.No entanto, há um certo alvoroço no momento e estamos sendo solicitados a encontrar uma maneira de desabilitar essa funcionalidade em nosso site.

Pergunta:Existe uma maneira de um site informar ao navegador para não se lembrar de senhas?Estou no desenvolvimento web há muito tempo, mas não sei se já me deparei com isso antes.

Qualquer ajuda é apreciada.

Foi útil?

Solução

Não tenho certeza se funcionará em todos os navegadores, mas você deve tentar definir autocomplete="off" no formulário.

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

A maneira mais fácil e simples de desabilitar o Formulário e prompts de armazenamento de senha e evitar que os dados do formulário sejam armazenados em cache no histórico da sessão é usar o atributo de elemento de formulário de preenchimento automático com valor "off".

De http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletion

Algumas pequenas pesquisas mostram que isso funciona no IE, mas não deixarei garantias;)

@Joseph:Se for um requisito estrito passar na validação XHTML com a marcação real (não sei por que seria), você poderia, teoricamente, adicionar esse atributo com javascript posteriormente, mas então os usuários com js desativados (provavelmente uma quantidade negligenciável de sua base de usuários ou zero se seu site requer js) ainda terão suas senhas salvas.

Exemplo com jQuery:

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

Outras dicas

Eu estava lutando com esse problema há algum tempo, com uma reviravolta única no problema.Os usuários privilegiados não podiam fazer com que as senhas salvas funcionassem para eles, mas os usuários normais precisavam disso.Isso significava que os usuários privilegiados tinham que fazer login duas vezes, e na segunda vez não exigiam senhas salvas.

Com esta exigência, a norma autocomplete="off" O método não funciona em todos os navegadores, porque a senha pode ter sido salva desde o primeiro login.Um colega encontrou uma solução para substituir o campo de senha quando ele estava focado em um novo campo de senha e, em seguida, focar no novo campo de senha (em seguida, conecte o mesmo manipulador de eventos).Isso funcionou (exceto que causou um loop infinito no IE6).Talvez houvesse uma maneira de contornar isso, mas estava me causando enxaqueca.

Por fim, tentei apenas colocar o nome de usuário e a senha fora do formulário.Para minha surpresa, isso funcionou!Funcionou no IE6 e nas versões atuais do Firefox e Chrome no Linux.Não testei mais, mas suspeito que funcione na maioria, senão em todos os navegadores (mas não me surpreenderia se houvesse um navegador por aí que não se importasse se não houvesse formulário).

Aqui está um exemplo de código, junto com um pouco de jQuery para fazê-lo funcionar:

<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>

Apenas use

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

além de

preenchimento automático = "desligado"

para a(s) entrada(s) que você não deseja lembrar dos dados do formulário (username, password, etc.) conforme mostrado abaixo:

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

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

Testado nas versões mais recentes dos principais navegadores, ou seja, Google Chrome, Mozilla Firefox, Microsoft Edge, etc.e funciona perfeitamente.Espero que isto ajude...

Bem, é um post muito antigo, mas ainda vou dar a minha solução, que minha equipe vem tentando há muito tempo.Acabamos de adicionar um novo campo input type="password" dentro do formulário e envolvê-lo em div e ocultar o div.Certifique-se de que esta div esteja antes da entrada da senha real.Isso funcionou para nós e não deu nenhuma opção para salvar senha

Plunk 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;}

Você pode evitar que o navegador corresponda aos formulários randomizando o nome usado no campo de senha em cada programa.Em seguida, o navegador vê uma senha para o mesmo URL, mas não pode ter certeza de que é o mesma senha.Talvez esteja controlando outra coisa.

Atualizar: observe que isso deve ser além de usando preenchimento automático ou outras táticas, e não um substituto para elas, pelos motivos indicados por outros.

Observe também que isso apenas impedirá que o navegador preenchimento automático a senha.Isso não impedirá que isso aconteça armazenar a senha em qualquer nível de segurança arbitrário que o navegador escolha usar.

Use reais autenticação de dois fatores para evitar a dependência exclusiva de senhas que podem ser armazenadas em muito mais lugares do que o cache do navegador do usuário.

A maneira mais limpa é usar autocomplete="off" O atributo de tag, mas o Firefox não o obedece corretamente quando você troca de campos com a guia.

A única maneira de impedir isso é adicionar um campo de senha oculta falsa que engana o navegador para preencher a senha lá.

<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"/>

É um hack feio, porque você altera o comportamento do navegador, o que deve ser considerado uma má prática.Use-o apenas se realmente precisar.

Observação:isso interromperá efetivamente o preenchimento automático de senha, porque o FF "salvará" o valor de #prevent_autofill (que está vazio) e tentará preencher todas as senhas salvas lá, pois sempre usa a primeira type="password" input que encontra no DOM após a respectiva entrada "nome de usuário".

Eu testei a adição de autocomplete = "off" na tag form em todos os principais navegadores.Na verdade, a maioria das pessoas nos EUA usa o IE8 até agora.

  1. IE8, IE9, IE10, Firefox, Safari funcionam bem.

    O navegador não pede "salvar senha".Além disso, o nome de usuário e a senha salvos anteriormente não foram preenchidos.

  2. Chrome e IE 11 não suportam o recurso autocomplete = "off"
  3. FF apoiando o preenchimento automático = "off".Mas às vezes as credenciais salvas existentes são preenchidas.

Atualizado em 11 de junho de 2014

Finalmente, abaixo está uma solução para vários navegadores usando javascript e está funcionando bem em todos os navegadores.

É necessário remover a tag "form" no formulário de login.Após a validação do lado do cliente, coloque essas credenciais em formato oculto e envie-as.

Além disso, adicione dois métodos.um para validação "validateLogin()" e outro para ouvir o evento enter enquanto clica enter na caixa de texto/senha/botão "checkAndSubmit()".porque agora o formulário de login não possui uma tag de formulário, então insira o evento que não está funcionando aqui.

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();
 }
}

Boa sorte!!!

Na verdade não - a única coisa que você poderia fazer de forma realista é oferecer conselhos no site;talvez, antes do primeiro login, você possa mostrar a eles um formulário com informações indicando que não é recomendado permitir que o navegador armazene a senha.

Em seguida, o usuário seguirá imediatamente o conselho, anotando a senha em um post-it e colando-a no monitor.

O que tenho feito é uma combinação de preenchimento automático = "off" e limpeza de campos de senha usando javascript/jQuery.

Exemplo de jQuery:

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

Usando setTimeout() você pode esperar que o navegador preencha o campo antes de limpá-lo; caso contrário, o navegador sempre preencherá automaticamente depois que você limpar o campo.

se autocomplete = "off" não estiver funcionando ... remova a tag do formulário e use uma tag div e passe os valores do formulário usando jquery para o servidor.Isso funcionou para mim.

Como autocomplete="off" não funciona para campos de senha, é necessário confiar em javascript.Aqui está uma solução simples baseada nas respostas encontradas aqui.

Adicione o atributo data-password-autocomplete="off" ao seu campo de senha:

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

Inclua o seguinte 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');
        });
    });     
});

Esta solução funciona tanto para Chrome quanto para FF.

Só para que as pessoas percebam - o atributo 'autocomplete' funciona na maioria das vezes, mas usuários avançados podem contorná-lo usando um bookmarklet.

Ter um navegador salvando suas senhas na verdade aumenta a proteção contra keylogging, então possivelmente a opção mais segura é salvar as senhas no navegador, mas protegê-las com uma senha mestra (pelo menos no Firefox).

Eu tenho uma solução alternativa que pode ajudar.

Você poderia fazer um hack de fonte personalizado.Então, faça uma fonte personalizada, com todos os caracteres como ponto/círculo/estrela por exemplo.Use-a como uma fonte personalizada para o seu site.Veja como fazer isso no inkscape: como fazer sua própria fonte

Em seguida, no seu formulário de login, use:

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

Em seguida adicione seu 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';
}

Bastante compatível com vários navegadores.Eu tentei IE6 +, FF, Safari e Chrome.Apenas certifique-se de que a fonte oet que você converte não esteja corrompida.Espero que ajude?

Markus levantou um ótimo ponto.resolvi pesquisar o autocomplete atributo e obteve o seguinte:

A única desvantagem de usar esse atributo é que ele não é padrão (ele funciona nos navegadores do IE e Mozilla) e faria com que a validação do XHTML falhe.Eu acho que este é um caso em que é razoável quebrar a validação. (fonte)

Então, eu teria que dizer que, embora não funcione 100% em todos os aspectos, ele é gerenciado nos principais navegadores, por isso é uma ótima solução.

A maneira mais simples de resolver esse problema é colocar os campos INPUT fora da tag FORM e adicionar dois campos ocultos dentro da tag FORM.Em seguida, em um ouvinte de evento de envio, antes que os dados do formulário sejam enviados ao servidor, copie os valores da entrada visível para as invisíveis.

Aqui está um exemplo (você não pode executá-lo aqui, pois a ação do formulário não está definida como um script de login real):

<!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>

Minha solução alternativa para js (jquery) é altere o tipo de entrada de senha para texto no envio do formulário.A senha pode ficar visível por um segundo, então também escondi a entrada antes disso. Prefiro não usar isso para formulários de login, mas é útil (juntamente com autocomplete="off"), por exemplo, dentro da parte administrativa do site.

Tente colocar isso dentro de um console (com jquery), antes de enviar o formulário.

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

Testado no Chrome 44.0.2403.157 (64 bits).

Eu tentei acima autocomplete="off" e ainda assim qualquer coisa bem sucedida.se você estiver usando angular js, minha recomendação é usar o botão e o ng-click.

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

Isso já tem uma resposta aceita, estou adicionando isso se alguém não conseguir resolver o problema com a resposta aceita, ele pode usar meu mecanismo.

Obrigado pela pergunta e pelas respostas.

Testei muitas soluções.Nome do campo de senha dinâmica, vários campos de senha (invisíveis para os falsos), alteração do tipo de entrada de "texto" para "senha", autocomplete="off", autocomplete="new-password",...mas nada resolveu isso com o navegador recente.

Para me livrar da lembrança da senha, finalmente tratei a senha como campo de entrada e "desfoquei" o texto digitado.

É menos "seguro" do que um campo de senha nativo, pois a seleção do texto digitado o mostraria como texto não criptografado, mas a senha não será lembrada.Também depende de ter o Javascript ativado.

Você terá que estimar o risco de usar a proposta abaixo versus a opção de lembrar senha do navegador.

Embora a lembrança de senha possa ser gerenciada (desativada por site) pelo usuário, ela é adequada para um computador pessoal, não para um computador “público” ou compartilhado.

Meu caso é para um ERP rodando em computadores compartilhados, então vou tentar minha solução abaixo.

<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">

Uma maneira que conheço é usar (por exemplo) JavaScript para copiar o valor do campo de senha antes de enviar o formulário.

O principal problema com isso é que a solução está vinculada ao JavaScript.

Então, novamente, se puder ser vinculado ao JavaScript, você também pode fazer o hash da senha no lado do cliente antes de enviar uma solicitação ao servidor.

O verdadeiro problema é muito mais profundo do que apenas adicionar atributos ao seu HTML - esta é uma preocupação comum de segurança, é por isso que as pessoas inventaram chaves de hardware e outras coisas malucas para segurança.

Imagine que você tenha o autocomplete="off" funcionando perfeitamente em todos os navegadores.Isso ajudaria na segurança?Claro que não.Os usuários anotarão suas senhas em livros didáticos, em adesivos colados em seus monitores, onde todos os visitantes do escritório poderão vê-las, salvá-las em arquivos de texto na área de trabalho e assim por diante.

Geralmente, o aplicativo web e o desenvolvedor web não são responsáveis ​​de forma alguma pela segurança do usuário final.Os usuários finais só podem se proteger.Idealmente, eles DEVEM manter todas as senhas em mente e usar a funcionalidade de redefinição de senha (ou entrar em contato com o administrador) caso as tenham esquecido.Caso contrário, sempre haverá o risco de a senha ser vista e roubada de alguma forma.

Então, ou você tem alguma política de segurança maluca com chaves de hardware (como alguns bancos oferecem serviços bancários pela Internet que basicamente empregam autenticação de dois fatores) ou basicamente SEM SEGURANÇA.Bem, isso é um pouco exagerado, é claro.É importante entender contra o que você está tentando se proteger:

  1. Acesso não autorizado.O formulário de login mais simples é basicamente suficiente.Às vezes, são tomadas medidas adicionais, como perguntas de segurança aleatórias, CAPTCHAs, proteção de senha, etc.
  2. Sniffer de credenciais.HTTPS é OBRIGATÓRIO se as pessoas acessam seu aplicativo da web a partir de pontos de acesso Wi-Fi públicos, etc.Mencione que mesmo tendo HTTPS, seus usuários precisam alterar suas senhas regularmente.
  3. Ataque interno.Existem dois exemplos disso, começando com o simples roubo de suas senhas do navegador ou daquelas que você anotou em algum lugar da mesa (não requer nenhum conhecimento de TI) e terminando com a falsificação de sessão e interceptação de tráfego de rede local (mesmo criptografado) e acessar ainda mais o aplicativo da web como se fosse outro usuário final.

Nesta postagem específica, posso ver requisitos inadequados impostos ao desenvolvedor que ele nunca será capaz de resolver devido à natureza do problema – segurança do usuário final.Meu ponto subjetivo é que o desenvolvedor deveria basicamente dizer NÃO e apontar o problema dos requisitos, em vez de perder tempo com tais tarefas, honestamente.Isso não torna absolutamente o seu sistema mais seguro, mas sim leva a casos com adesivos nos monitores.Infelizmente, alguns chefes ouvem apenas o que querem ouvir.No entanto, se eu fosse você, tentaria explicar de onde vem o problema real, e que autocomplete="off" não resolveria o problema, a menos que forçasse os usuários a manter todas as suas senhas exclusivamente em suas cabeças!O desenvolvedor por sua vez não pode proteger os usuários completamente, os usuários precisam saber como usar o sistema e ao mesmo tempo não expor suas informações confidenciais/seguras e isso vai muito além da autenticação.

Enfrentando o mesmo problema da HIPAA e encontrando uma solução relativamente fácil,

  1. Crie um campo de senha oculto com o nome do campo como uma matriz.

    <input type="password" name="password[]" style="display:none" />
    
  2. Use a mesma matriz para o campo de senha real.

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

O navegador (Chrome) pode solicitar que você "Salvar senha", mas independentemente de o usuário selecionar salvar, na próxima vez que fizer login, a senha preencherá automaticamente o campo de senha oculta, o slot zero na matriz, deixando o primeiro slot em branco.

Tentei definir o array, como "senha[part2]", mas ainda me lembrei.Eu acho que isso atrapalha se for um array não indexado, porque ele não tem escolha a não ser descartá-lo em primeiro lugar.

Então você usa a linguagem de programação de sua preferência para acessar o array, PHP por exemplo,

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

Já que a maior parte autocomplete sugestões, incluindo a resposta aceita, não funcionam nos navegadores atuais (ou seja,gerenciadores de senhas de navegadores ignoram autocomplete), uma solução mais inovadora é trocar entre password e text digita e faz com que a cor de fundo corresponda à cor do texto quando o campo é um campo de texto simples, que continua a ocultar a senha enquanto é um campo de senha real quando o usuário (ou um programa como o KeePass) está digitando uma senha.Os navegadores não pedem para salvar senhas armazenadas em campos de texto simples.

A vantagem dessa abordagem é que ela permite aprimoramento progressivo e, portanto, não requer Javascript para que um campo funcione como um campo de senha normal (você também pode começar com um campo de texto simples e aplicar a mesma abordagem, mas isso não é realmente HIPAA compatível com PHI/PII).Essa abordagem também não depende de formulários/campos ocultos que podem não ser necessariamente enviados ao servidor (porque estão ocultos) e alguns desses truques também não funcionam em vários navegadores modernos.

Plug-in jQuery:

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

Código-fonte relevante do link acima:

(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));

Demonstração:

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

Clique em "Adicionar entrada" no menu e role até o final da página até "Módulo:Pare o Gerenciador de Senhas".

Isenção de responsabilidade:Embora essa abordagem funcione para pessoas com visão, pode haver problemas com o software leitor de tela.Por exemplo, um leitor de tela pode ler a senha do usuário em voz alta porque vê um campo de texto simples.Também pode haver outras consequências imprevistas do uso do plugin acima.A alteração da funcionalidade integrada do navegador da web deve ser feita com moderação, testando uma ampla variedade de condições e casos extremos.

Existe uma maneira de um site informar ao navegador para não se lembrar de senhas?

O site informa ao navegador que é uma senha usando <input type="password">.Então, se você deve faça isso da perspectiva do site, então você terá que mudar isso.(Obviamente eu não recomendo isso).

A melhor solução seria fazer com que o usuário configurasse seu navegador para que ele não se lembrasse das senhas.

Se você não quiser confiar no sinalizador de preenchimento automático, certifique-se de que o usuário digite na caixa usando o evento onchange.O código abaixo é um formulário HTML simples.O elemento de formulário oculto password_edited começa definido como 0.Quando o valor da senha é alterado, o JavaScript na parte superior (função pw_edited) altera o valor para 1.Quando o botão é pressionado, ele verifica o valor, insira o código aqui antes de enviar o formulário.Dessa forma, mesmo que o navegador te ignore e preencha automaticamente o campo, o usuário não poderá passar pela página de login sem digitar no campo de senha.Além disso, certifique-se de deixar o campo de senha em branco quando o foco estiver definido.Caso contrário, você pode adicionar um personagem no final e depois voltar e removê-lo para enganar o sistema.Eu recomendo adicionar autocomplete="off" à senha, mas este exemplo mostra como o código de backup funciona.

<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" não funciona para desabilitar o gerenciador de senhas no Firefox 31 e provavelmente também não em algumas versões anteriores.

Confira a discussão no Mozilla sobre esse assunto:https://bugzilla.mozilla.org/show_bug.cgi?id=956906

Queríamos usar um segundo campo de senha para inserir uma senha de uso único gerada por um token.Agora estamos usando uma entrada de texto em vez de uma entrada de senha.:-(

Recebi uma tarefa semelhante para desativar o preenchimento automático de nome de login e senhas por navegador. Depois de muitas tentativas e erros, achei a solução abaixo ideal.Basta adicionar os controles abaixo antes dos controles originais.

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

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

Isso está funcionando bem para IE11 e Chrome 44.0.2403.107

autocomplete="off" funciona para a maioria dos navegadores modernos, mas outro método que usei e que funcionou com sucesso com o Epiphany (um navegador baseado em WebKit para GNOME) é armazenar um prefixo gerado aleatoriamente no estado da sessão (ou um campo oculto, aconteceu de eu ter uma variável adequada já no estado da sessão) e use isso para alterar o nome dos campos.O Epiphany ainda quer salvar a senha, mas ao voltar ao formulário não preencherá os campos.

Não tive problemas ao usar este método:

Use autocomplete="off", adicione um campo de senha oculto e depois outro não oculto.O navegador tenta completar automaticamente o oculto se não respeitar o preenchimento automático = "off"

Outra solução é fazer o POST utilizando um formulário oculto onde todos os inputs são do tipo oculto.O formulário visível utilizará entrada do tipo "senha".Este último formulário nunca será enviado e portanto o navegador não poderá interceptar de forma alguma a operação de login.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top