Tipo de entrada = senha, não deixe o navegador lembrar a senha

101

Lembro-me de ter visto uma maneira de fazer com <input type="password" />que o navegador não solicite que o usuário salve a senha. Mas estou desenhando um branco. Existe um atributo HTML ou algum truque de JavaScript que fará isso?

DavGarcia
fonte
4
Duplicado de stackoverflow.com/questions/32369/…
Jon Skeet

Respostas:

123

Tente usar autocomplete="off". Não tenho certeza se todos os navegadores são compatíveis. Documentos do MSDN aqui .

EDIT : Nota: a maioria dos navegadores abandonou o suporte para este atributo. Consulte O autocomplete = "off" é compatível com todos os navegadores modernos?

Isso é indiscutivelmente algo que deve ser deixado para o usuário, e não para o designer do site.

Tvanfosson
fonte
2
Você também pode entregar a página com HTTPS e via cabeçalho HTTP ou tag META para evitar o cache. Dessa forma, a senha também não será armazenada (pelo menos no Internet Explorer).
doekman,
No que diz respeito à validação, o HTML5 adiciona o atributo autocomplete às especificações, então está tudo bem agora
VictorySaber
9
Nota para leitores futuros: todos os principais navegadores estão se movendo no sentido de ignorar o atributo. (consulte stackoverflow.com/a/21348793/37706 )
rdans
@RyanDansie, obrigado por apontar isso. Eu atualizei a resposta. A resposta antiga é ... velha.
tvanfosson
8
"Isso é indiscutivelmente algo que deve ser deixado para o usuário e não para o designer do site." existem razões técnicas e não técnicas para isso. As senhas de uso único não devem ser lembradas, por exemplo. Sites de banco com "digite o primeiro dígito do seu PIN" são outro. Não se esqueça de que um analista de negócios pode decidir que deseja um campo de senha e remover a escolha do desenvolvedor.
Sprague de
61

<input type="password" autocomplete="off" />

Gostaria apenas de acrescentar que, como usuário, acho isso muito chato e um incômodo de superar. Eu recomendo fortemente não usar isso, pois é mais do que provável que irrite seus usuários.

As senhas ainda não estão armazenadas no MRU e as máquinas públicas configuradas corretamente nem mesmo salvarão o nome de usuário.

Matpie
fonte
23
+1 para "não irrite seus usuários". Isso é exatamente o que esse tipo de recurso faz. Assim como os sites que forçam o armazenamento em cache, o botão Voltar limpa o formulário. EXTREMAMENTE irritante.
cletus
6
1 Eu concordo totalmente. É para um administrador editar a página de perfil do cliente, onde você só insere uma senha se pretende alterá-la. Dessa forma, os administradores não alteram a senha toda vez que vão editar as informações do cliente.
DavGarcia
14
É muito útil para campos de número de cartão de crédito. O formulário do PayPal é armazenado em todos os navegadores, e qualquer pessoa que use seu computador pode inserir novamente todos os dados, então você tem que apagar manualmente todos os campos memorizados.
Egor Pavlikhin
31
Em um formulário onde o usuário pode definir uma senha que não tem nada a ver com seu login, habilitar o preenchimento automático é na verdade a opção mais irritante - o navegador pode se oferecer para salvar uma senha com a qual ele não pode fazer nada. Além disso, se a segurança é uma questão sensível, não presumo que todas as máquinas públicas estejam configuradas corretamente.
jrb
3
Estou usando isso para uma senha de uso único. Como jrb disse, seria muito chato se o navegador o armazenasse.
Danation
12

Eu resolvi de outra maneira. Você pode tentar isso.

<input id="passfld" type="text" autocomplete="off" />
<script type="text/javascript">
// Using jQuery
$(function(){                                               
    setTimeout(function(){
        $("input#passfld").attr("type","password");
    },10);
});


// or in pure javascript
 window.onload=function(){                                              
    setTimeout(function(){  
        document.getElementById('passfld').type = 'password';
    },10);
  }   
</script>

#outra maneira

 <script type="text/javascript">    
 function setAutoCompleteOFF(tm){
    if(typeof tm =="undefined"){tm=10;}
    try{
    var inputs=$(".auto-complete-off,input[autocomplete=off]"); 
    setTimeout(function(){
        inputs.each(function(){     
            var old_value=$(this).attr("value");            
            var thisobj=$(this);            
            setTimeout(function(){  
                thisobj.removeClass("auto-complete-off").addClass("auto-complete-off-processed");
                thisobj.val(old_value);
            },tm);
         });
     },tm); 
    }catch(e){}
  }
 $(function(){                                              
        setAutoCompleteOFF();
    });
</script>

// você precisa adicionar o atributo autocomplete = "off" ou você pode adicionar a classe .auto-complete-off na caixa de entrada e desfrutar

Exemplo:

  <input id="passfld" type="password" autocomplete="off" />
    OR
  <input id="passfld" class="auto-complete-off" type="password"  />
Sarwar Hasan
fonte
4
Isso impede que o navegador armazene a senha em vez de impedir o preenchimento automático, que é uma solução melhor no meu cenário.
Pau Fracés
Obrigado, trabalhei para mim no último cromo. Observação: usado em um sistema interno onde apenas o Chrome é permitido, faça mais testes se estiver usando no site de produção.
Izion de
@AntoVinish, espero que minha última solução funcione no firefox 40.
Sarwar Hasan
7

Tentei o seguinte e parece que funciona com qualquer navegador:

<input id="passfld" type="text" autocomplete="off" />

<script type="text/javascript">
    $(function(){  
        var passElem = $("input#passfld");
        passElem.focus(function() { 
            passElem.prop("type", "password");                                             
        });
    });
</script>

Desta forma, é muito mais seguro do que utilizar técnicas de timeout, pois garante que o campo de entrada cederá a senha quando o usuário a focar.

Apostolidis
fonte
5

Quanto às questões de segurança, aqui está o que um consultor de segurança dirá a você sobre toda a questão de campo (isto é de uma auditoria de segurança independente real):

Preenchimento automático de HTML ativado - Os campos de senha em formulários HTML têm o preenchimento automático ativado. A maioria dos navegadores tem a facilidade de lembrar as credenciais do usuário inseridas em formulários HTML.

Risco Relativo: Baixo

Sistemas / dispositivos afetados: o https: // * ** * *** /

Também concordo que isso deve abranger qualquer campo que contenha dados realmente privados. Acho que não há problema em forçar uma pessoa a sempre digitar suas informações de cartão de crédito, código CVC, senhas, nomes de usuário, etc, sempre que o site vai acessar qualquer coisa que deve ser mantida segura [universalmente ou por requisitos de conformidade legal]. Por exemplo: formulários de compra, sites de banco / crédito, sites de impostos, dados médicos, federal, nuclear, etc. - não sites como Stack Overflow ou Facebook.

Outros tipos de sites - por exemplo, TimeStar Online para entrar e sair do trabalho - é estúpido, já que eu sempre uso o mesmo PC / conta no trabalho, que não consigo salvar as credenciais nesse site - estranhamente eu consigo no meu Android mas não em um iPad. Mesmo os PCs compartilhados, isso não seria tão ruim, já que marcar o ponto de entrada / saída para outra pessoa realmente não faz nada além de irritar seu supervisor. (Eles têm que entrar e excluir os golpes errados - apenas escolha não salvar em PCs públicos).

Michael
fonte
5
Apenas adicionando um comentário aqui por um motivo pelo qual você não gostaria de salvar uma senha. Eu mantenho um site com contas de usuário onde os administradores podem alterar a senha de um usuário. O cliente está atualmente furioso com o fato de o Chrome se oferecer para salvar a senha inserida no formulário "alterar senha" todas as vezes para cada usuário , porque identifica erroneamente o formulário de edição de usuário como um formulário de login. Dar instruções simples como "basta clicar em Nunca lembrar a senha" está além delas, aparentemente.
charredUtensil
5
<input type="password" placeholder="Enter New Password" autocomplete="new-password">

Aqui está.

Bhaumik Thakkar
fonte
2
É assim, existem várias soluções alternativas, e é tão simples quanto isso, testado com a última versão do Firefox (v67) e do Chrome (75).
Mariano Ruiz
O Chrome 80 ainda se oferecerá para lembrar a senha após o envio do formulário.
Bouke
4

Aqui está a melhor resposta e a mais fácil! Coloque um campo de senha extra na frente do seu inputcampo e defina o display:none, de forma que quando o navegador preencher, ele o faça de uma forma inputque você não se importe.

Mude isso:

<input type="password" name="password" size="25" class="input" id="password" value="">

para isso:

<input type="password" style="display:none;">
<input type="password" name="password" size="25" class="input" id="password" value="">
Capitão Fantástico
fonte
Na verdade, funciona se 2 campos de senha estiverem no formulário, mas o novo navegador ignora a 2ª senha se não estiver visível e habilitada; (
Cedric Simon
1
Usar display:nonenão funciona para mim (Chrome 61 OSX), mas funciona:<input type="password" style="position: absolute; top: -1000px;">
John Hascall
2

Leia também esta resposta, onde ele está usando essa solução fácil que funciona em qualquer lugar (veja também a correção para o Safari móvel):

<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>
Ferie
fonte
1

Você pode usar JQuery, selecione o item por id:

$("input#Password").attr("autocomplete","off");

Ou selecione o item por tipo:

$("input[type='password']").attr("autocomplete","off");

Ou também:

Você pode usar Javascript puro:

document.getElementById('Password').autocomplete = 'off';
Fernando
fonte
1

você também pode usá-lo como seguir

$('#Password').attr("autocomplete", "off");
setTimeout('$("#Password").val("");', 2000);
Chandrika Prajapati
fonte
1

visto que autocomplete = off está obsoleto, sugiro uma solução mais recente.

Defina seu campo de senha para um campo de texto normal e mascare sua entrada com "discos" usando CSS. o código deve ser semelhante a este:

<input type="text" class="myPassword" /> 

input .myPassword{
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

Observe que isso pode não funcionar propriamente em navegadores firefox, e um walkaround adicional é necessário. Leia mais sobre isso aqui: https://stackoverflow.com/a/49304708/5477548 .

A solução foi retirada deste link , mas para cumprir o SO "no-hotlinks", eu a resumi aqui.

yoad w
fonte
0

No caso da maioria dos navegadores principais, ter uma entrada fora de e não conectado a nenhum formulário engana o navegador fazendo-o pensar que não houve envio. Nesse caso, você teria que usar a validação JS pura para seu login e a criptografia de suas senhas também seria necessária.

Antes:

<form action="..."><input type="password"/></form>

Depois de:

<input type="password"/>
Cannicida
fonte
1
A propósito, este é um truque que você provavelmente não deveria usar. Por não usar uma tag de formulário, seu código se torna HTML4 por padrão e torna mais difícil validar as contas de seus usuários.
Cannicídio
0

Descobri que o seguinte funciona no Firefox e no Chrome.

<form ... > <!-- more stuff -->
<input name="person" type="text" size=30 value="">
<input name="mypswd" type="password" size=6 value="" autocomplete="off">
<input name="userid" type="text" value="security" style="display:none">
<input name="passwd" type="password" value="faker" style="display:none">
<!-- more stuff --> </form>

Todos eles estão na seção de formulários. "person" e "mypswd" são o que você quer, mas o navegador salvará "userid" e "passwd" uma vez, e nunca mais uma vez que eles não mudam. Você pode eliminar o campo "pessoa" se realmente não precisar dele. Nesse caso, tudo o que você quer é o campo "mypswd", que pode mudar de alguma forma conhecida pelo usuário de sua página da web.

Dick Guertin
fonte
0

A única maneira de fazer com que o firefox, o edge e o Internet explorer desliguem o preenchimento automático é adicionar autocomplete = "false" na minha declaração de formulário, como:

  <form action="postingpage.php" autocomplete="false" method="post">

e tenho que adicionar autocomplete = "off" à entrada do meu formulário e alterar o tipo para texto como:

     <input type="text" autocomplete="off">

Parece que esse código html precisa ser padronizado com os navegadores. o formulário type = password deve ser revisado para que substitua as configurações do navegador. O único problema que tenho é que perdi a máscara de entrada. Mas pelo lado bom, o irritante "este site não é seguro" não está aparecendo no Firefox.

para mim, não é grande coisa, uma vez que o usuário já está autenticado e é meu nome de usuário e senha de alteração dele

Drtechno
fonte
2
NÃO FAÇA ISSO. Os dados ainda serão enviados em texto simples pela rede, o que é todo o problema com HTTP (não HTTPS) em primeiro lugar, por isso sua mensagem de aviso "irritante". Não faz diferença que o usuário já esteja autenticado porque um Man In The Middle ainda pode ver os dados de texto simples e o registro do lado do servidor pode ser configurado de forma diferente (pode armazenar os cabeçalhos de solicitação, enquanto que há outros problemas se ele tivesse armazenado o POST dados em HTTPS).
Jacob de
https criptografa o tráfego. Se você estiver usando isso como parte de um aplicativo público da Internet, faça-o de qualquer maneira. O método Post impede a marcação de favoritos, e vários Iframes de código php dentro de um HTML evita a injeção de URL. Tecnicamente, você deve colocar seu caminho completo. Se você estiver implantando, eu recomendaria carregar uma variável $ _SESSION com o url base que está escrito em texto em vez de olhar para as variáveis ​​$ _SERVER. $ _SERVER ['HTTP_HOST'], e $ _SERVER ['PHP_SELF'] só devem ser usados ​​em ambientes não públicos porque ambos têm vários exploits.
drtechno
A propósito, meu exemplo é para sistemas fechados que não estão conectados à Internet de forma alguma
drtechno
ninguém mencionou o uso de um esquema de criptografia executado com "java onclick" e, em seguida, envie o formulário após a rotina de criptografia.
drtechno