Acreditamos que o Stack Overflow não deve ser apenas um recurso para questões técnicas muito específicas, mas também para diretrizes gerais sobre como resolver variações em problemas comuns. "Autenticação baseada em formulário para websites" deve ser um bom tópico para tal experiência.
We'irá assumir que você já sabe como construir um formulário HTML de login+password que POST os valores para um script no lado do servidor para autenticação. As seções abaixo tratarão de padrões para uma autenticação prática e sólida, e como evitar as armadilhas de segurança mais comuns. Para HTTPS ou não para HTTPS? A menos que a conexão já seja segura (ou seja, sintonizada através de HTTPS usando SSL/TLS), os valores do seu formulário de login serão enviados em texto claro, o que permite que qualquer pessoa que escute na linha entre o navegador e o servidor web seja capaz de ler os logins à medida que eles passam. Este tipo de escuta é feito rotineiramente pelos governos, mas em geral, nós ganhamos't endereço 'possuído' fios além de dizer isto: Basta usar HTTPS. Em essência, a única forma prática de proteção contra wiretapping/packet sniffing durante o login é usando HTTPS ou outro esquema de criptografia baseado em certificados (por exemplo, [TLS][1]) ou um & esquema de resposta de desafio testado (por exemplo, o SRP [Diffie-Hellman][2]- baseado em SRP). Qualquer outro método pode ser facilmente contornado* por um atacante que escuta. Claro que, se você estiver disposto a ficar um pouco impraticável, você também pode empregar alguma forma de esquema de autenticação de dois fatores (por exemplo, a aplicação Google Authenticator, um ' estilo da guerra fria' codebook, ou um dongle gerador de chaves RSA). Se aplicado corretamente, isto poderia funcionar mesmo com uma conexão não segura, mas é difícil imaginar que um dispositivo estaria disposto a implementar um auth de dois fatores, mas não SSL. *(Não) Roll-your-own JavaScript encryption/hashing Dado o custo percebido (embora agora [evitável][27]) e a dificuldade técnica de configurar um certificado SSL no seu site, alguns desenvolvedores são tentados a rolar seus próprios esquemas de hashing in-browser ou criptografia, a fim de evitar passar logins de texto claro sobre um fio inseguro. Embora este seja um pensamento nobre, ele é essencialmente inútil (e pode ser uma [falha de segurança][3]), a menos que seja combinado com um dos itens acima - ou seja, proteger a linha com criptografia forte ou usar um mecanismo de desafio-resposta experimentado e testado (se você não'não sabe o que isso é, apenas saiba que é um dos mais difíceis de provar, mais difícil de projetar e mais difícil de implementar conceitos em segurança digital). Embora seja verdade que o hashing da senha pode ser eficaz contra a divulgação da senha, ele é vulnerável a ataques de replay, ataques Man-In-The-Middle / hijackings (se um atacante pode injetar alguns bytes em sua página HTML não segura antes que ela chegue ao seu navegador, eles podem simplesmente comentar o hashing no JavaScript), ou ataques de força bruta (já que você está entregando ao atacante tanto o nome de usuário, sal e senha hashed). CAPTCHAS contra a humanidade CAPTCHA][4] destina-se a frustrar uma categoria específica de ataque: dicionário automatizado/ ensaio de força bruta - e erro sem operador humano. Não há dúvida de que esta é uma ameaça real, no entanto, existem maneiras de lidar com ela sem problemas que don't requerem um CAPTCHA, esquemas de estrangulamento de login do lado do servidor especificamente projetados - nós'discutiremos isso mais tarde. Saiba que implementações CAPTCHA não são criadas da mesma forma; elas frequentemente são't humano-solváveis, a maioria delas são realmente ineficazes contra bots, todas elas são ineficazes contra mão-de-obra barata do terceiro mundo (de acordo com [OWASP][5], a taxa atual de sweatshop é de $12 por 500 testes), e algumas implementações podem ser tecnicamente ilegais em alguns países (veja [OWASP Authentication Cheat Sheet][6]). Se você precisa usar um CAPTCHA, use o Google's [reCAPTCHA][7], uma vez que, por definição, é duro para o OCR (uma vez que já usa scans de livros não classificados pelo OCR) e se esforça muito para ser fácil de usar. Pessoalmente, eu tendo a achar o CAPTCHAS irritante, e usá-lo apenas como último recurso quando um usuário falhou em logar uma série de vezes e os atrasos de estrangulamento são maximizados. Isto raramente acontece o suficiente para ser aceitável, e fortalece o sistema como um todo. Armazenamento de senhas / Verificação de logins Isto pode finalmente ser do conhecimento comum depois de todos os hacks e fugas de dados de utilizadores altamente publicitados que nós'vimos nos últimos anos, mas tem de ser dito: Não armazene senhas em texto claro na sua base de dados. Bancos de dados de usuários são rotineiramente hackeados, vazados ou coletados através de injeção SQL, e se você estiver armazenando senhas em bruto, em texto puro, isso é um jogo instantâneo para a sua segurança de login. Então, se você pode't armazenar a senha, como você verifica se a combinação login+senha POSTed do formulário de login está correta? A resposta é hashing usando uma [função de derivação de chave][24]. Sempre que um novo usuário é criado ou uma senha é alterada, você pega a senha e a executa através de um KDF, como Argon2, bcrypt, scrypt ou PBKDF2, transformando a senha de texto claro ("correcthorsebatterystaple") em uma string longa, de aparência aleatória, que é muito mais segura para armazenar em sua base de dados. Para verificar um login, você executa a mesma função de hash na senha digitada, desta vez passando no sal e comparando a string de hash resultante com o valor armazenado na sua base de dados. Argon2, bcrypt e scrypt armazenam o sal já com o hash. Veja este [artigo][23] no sec.stackexchange para informações mais detalhadas. A razão pela qual um sal é usado é que o hash em si não é suficiente -- você'vai querer adicionar um chamado 'sal' para proteger o hash contra [tabelas arco-íris][8]. Um sal impede efetivamente que duas senhas que coincidam exatamente sejam armazenadas como o mesmo valor de hash, impedindo que toda a base de dados seja escaneada de uma só vez se um atacante estiver executando um ataque de adivinhação de senha. Um hash criptográfico não deve ser usado para armazenamento de senhas porque senhas selecionadas pelo usuário não são suficientemente fortes (ou seja, normalmente não contêm entropia suficiente) e um ataque de adivinhação de senha poderia ser completado em um tempo relativamente curto por um atacante com acesso aos hashes. É por isso que são usados KDFs - estes efetivamente ["esticam a chave"][25], o que significa que cada senha que um atacante adivinha causa múltiplas repetições do algoritmo de hash, por exemplo 10.000 vezes, o que faz com que o atacante adivinhe a senha 10.000 vezes mais lentamente. Dados da sessão - "Você está logado como Spiderman69" Uma vez que o servidor tenha verificado o login e a senha contra a sua base de dados de usuários e encontrado uma correspondência, o sistema precisa de uma maneira de lembrar que o navegador foi autenticado. Este fato só deve ser armazenado do lado do servidor nos dados da sessão.
Se você não está familiarizado com os dados da sessão, aqui's como ele funciona: Uma única string gerada aleatoriamente é armazenada em um cookie expirando e usada para referenciar uma coleção de dados - os dados da sessão - que são armazenados no servidor. Se você estiver usando um framework MVC, isto sem dúvida já está sendo tratado. Se possível, certifique-se de que o cookie de sessão tenha os sinalizadores seguro e HTTP Only definidos quando enviado para o navegador. O flag HttpOnly fornece alguma proteção contra o cookie ser lido através de um ataque XSS. A bandeira segura garante que o cookie só seja enviado de volta via HTTPS e, portanto, protege contra ataques de sniffing de rede. O valor do cookie não deve ser previsível. Quando um cookie referenciando uma sessão inexistente é apresentado, seu valor deve ser substituído imediatamente para evitar fixação da sessão.
PARTE II: Como permanecer conectado - O Infame "Remember Me" Checkbox
Cookies de Login Persistentes (" lembre-se de mim" funcionalidade) são uma zona de perigo; por um lado, são totalmente seguros como os logins convencionais quando os usuários entendem como lidar com eles; e por outro lado, são um enorme risco de segurança nas mãos de usuários descuidados, que podem usá-los em computadores públicos e esquecer de sair, e que podem não saber o que são cookies de navegador ou como apagá-los. Pessoalmente, gosto de logins persistentes para os sites que visito regularmente, mas sei como lidar com eles com segurança. Se você tem certeza de que seus usuários sabem o mesmo, você pode usar os logins persistentes com a consciência limpa. Se não - bem, então você pode subscrever a filosofia de que os usuários que são descuidados com suas credenciais de login trouxeram isso sobre si mesmos se eles forem hackeados. It's não é como se fôssemos às casas dos nossos utilizadores's e rasgássemos todas aquelas notas Post-It indutoras de calma com palavras-passe que eles têm alinhadas na borda dos seus monitores, também. Claro que alguns sistemas podem't se dar ao luxo de ter qualquer conta hackeada; para tais sistemas, não há como justificar ter logins persistentes. Se você decidir implementar cookies de login persistentes, é assim que você o faz:
- Primeiro, leve algum tempo para ler artigo da Paragon Initiative's sobre o assunto. Você'vai precisar acertar um monte de elementos, e o artigo faz um ótimo trabalho explicando cada um deles.
- E apenas para reiterar uma das armadilhas mais comuns, NÃO ARMAZENHEM O LOGIN COOKIE PERSISTENTE (TOKEN) NA SUA BASE DE DADOS, SOMENTE UM HASH DE TI! O token de login é equivalente a senha, por isso se um atacante pusesse as mãos na sua base de dados, eles poderiam usar os tokens para entrar em qualquer conta, tal como se fossem combinações de senha de login com texto claro. Portanto, use hashing (de acordo com https://security.stackexchange.com/a/63438/5002 um hash fraco servirá perfeitamente para este propósito) ao armazenar tokens de login persistentes.
PARTE III: Usando perguntas secretas
Don't implementar 'perguntas secretas'**. O 'perguntas secretas' característica é um anti-padrão de segurança. Leia o artigo do link número 4 da lista DEVE-LER. Você pode perguntar a Sarah Palin sobre essa, depois que sua conta de e-mail do Yahoo! foi invadida durante uma campanha presidencial anterior porque a resposta à sua pergunta de segurança foi... "Wasilla High School"!
Mesmo com perguntas especificadas pelo usuário, é altamente provável que a maioria dos usuários escolha um dos dois:
- A 'standard' pergunta secreta como o nome de solteira da mãe'o nome de solteira ou animal favorito
- Um simples pedaço de trivialidade que qualquer pessoa poderia levantar do seu blog, perfil do LinkedIn, ou similar
- Qualquer pergunta que seja mais fácil de responder do que adivinhar sua senha. O que, para qualquer senha decente, é qualquer pergunta que você possa imaginar Em conclusão, as questões de segurança são inerentemente inseguras em praticamente todas as suas formas e variações e não devem ser empregadas num esquema de autenticação por qualquer razão. A verdadeira razão pela qual as questões de segurança existem mesmo na natureza é que elas convenientemente economizam o custo de algumas chamadas de suporte de usuários que podem't acessar seu e-mail para chegar a um código de reativação. Isto às custas da segurança e da reputação de Sarah Palin's. Vale a pena? Provavelmente não.
PARTE IV: Funcionalidade da Senha Esquecida
Eu já mencionei porque você deve nunca usar perguntas de segurança para lidar com senhas esquecidas/perdidas de usuários; também é desnecessário dizer que você nunca deve enviar aos usuários por e-mail suas senhas reais. Há pelo menos mais duas armadilhas comuns a evitar neste campo:
- Don't reset uma senha esquecida para uma senha forte gerada automaticamente - tais senhas são notoriamente difíceis de lembrar, o que significa que o usuário deve alterá-la ou escrevê-la - digamos, em um Post-It amarelo brilhante na borda do seu monitor. Em vez de definir uma nova senha, apenas deixe os usuários escolherem uma nova imediatamente - que é o que eles querem fazer de qualquer forma. (Uma exceção a isto pode ser se os usuários estão universalmente usando um gerenciador de senhas para armazenar/gerenciar senhas que normalmente seriam impossíveis de lembrar sem anotar).
- Tenha sempre o código de senha perdido/token na base de dados. AGAIN, este código é outro exemplo de um Equivalente de Senha, por isso DEVE ser hashado para o caso de um atacante ter colocado as mãos na sua base de dados. Quando um código de senha perdido for solicitado, envie o código em texto simples para o endereço de email do usuário's, depois o hash, salve o hash na sua base de dados -- e deite fora o original. Assim como uma senha ou um token de login persistente. Uma nota final: sempre certifique-se de que sua interface para inserir o código de senha 'perdido' é pelo menos tão segura quanto seu próprio formulário de login, ou um atacante irá simplesmente usar isso para obter acesso em seu lugar. Certificar-se de gerar códigos de senha muito longos 'perdidos' (por exemplo, 16 caracteres alfanuméricos sensíveis a maiúsculas e minúsculas) é um bom começo, mas considere adicionar o mesmo esquema de estrangulamento que você faz para o próprio formulário de login.
PARTE V: Verificando a Força da Senha
Primeiro, você'vai querer ler este pequeno artigo para uma verificação da realidade: As 500 palavras-passe mais comuns Ok, então talvez a lista seja't a lista canônica das senhas mais comuns em qualquer sistema qualquer lugar, mas é'é uma boa indicação de quão mal as pessoas escolherão suas senhas quando não houver uma política aplicada. Além disso, a lista parece assustadoramente próxima de casa quando você a compara com análises disponíveis publicamente de senhas recentemente roubadas. Por isso: Sem requisitos mínimos de força de senha, 2% dos usuários usam uma das 20 senhas mais comuns. Ou seja: se um atacante conseguir apenas 20 tentativas, 1 em cada 50 contas no seu site será crackable. Para frustrar isto é necessário calcular a entropia de uma senha e depois aplicar um limite. O Instituto Nacional de Padrões e Tecnologia (NIST) Publicação Especial 800-63 tem um conjunto de sugestões muito boas. Isso, quando combinado com um dicionário e uma análise de layout de teclado (por exemplo, 'qwertyuiop' é uma senha ruim), pode rejeitar 99% de todas as senhas mal selecionadas a um nível de 18 bits de entropia. O simples cálculo da força da senha e mostrando um medidor de força visual para um usuário é bom, mas insuficiente. A menos que seja aplicado, muitos usuários provavelmente irão ignorá-lo. E, para uma nova abordagem da facilidade de uso de senhas de alto centropia, Randall Munroe's Password Strength xkcd é altamente recomendado. Utilize Troy Hunt's Have I Been Pwned API para verificar senhas de usuários contra senhas comprometidas em violações de dados públicos.
PARTE VI: Muito Mais - Ou: Prevenindo Tentativas de Login de Fogo Rápido
Primeiro, dê uma olhada nos números: Password Recovery Speeds - How long will your password stand up Se você não'não tem tempo para olhar as tabelas nesse link, aqui's a lista delas:
- Leva virtualmente nenhum tempo para descobrir uma senha fraca, mesmo que você'esteja quebrando-a com um ábaco
- Leva virtualmente nenhum tempo para quebrar uma senha alfanumérica de 9 caracteres se ela for ** insensível à caixa***.
- Leva virtualmente nenhum tempo para decifrar uma senha intrincada, símbolos e letras, maiúsculas e minúsculas se for ** sem mais de 8 caracteres*** (um PC de mesa pode pesquisar todo o espaço chave até 7 caracteres em questão de dias ou até horas)
- *No entanto, demoraria muito tempo a decifrar até uma senha de 6 caracteres, se você estivesse limitado a uma tentativa por segundo! Então, o que podemos aprender com estes números? Bem, muito, mas podemos nos concentrar na parte mais importante: o fato de que evitar grandes números de tentativas de login sucessivas e rápidas (ou seja, o ataque força bruta) é realmente'isso é difícil. Mas impedi-lo direito é'não é tão fácil como parece. Geralmente falando, você tem três opções que são todas eficazes contra ataques de força bruta (e ataques de dicionário, mas como você já está empregando uma política de senhas fortes, elas não devem't ser um problema):
- Apresente um CAPTCHA após N tentativas fracassadas (irritante como o inferno e frequentemente ineficaz -- mas eu'estou me repetindo aqui)
- Travar contas e exigir verificação de e-mail após N tentativas fracassadas (este é um ataque DoS à espera de acontecer)
- E finalmente, login throttling: ou seja, estabelecendo um intervalo de tempo entre tentativas após N tentativas fracassadas (sim, ataques DoS ainda são possíveis, mas pelo menos eles são muito menos prováveis e muito mais complicados de conseguir). Melhor prática #1: Um pequeno atraso de tempo que aumenta com o número de tentativas falhadas, como:
- 1 tentativa falhada = sem atraso
- 2 tentativas falhadas = 2 segundos de atraso
- 3 tentativas falhadas = 4 segundos de atraso
- 4 tentativas falhadas = atraso de 8 segundos
- 5 tentativas falhadas = 16 segundos de atraso
- etc. DoS atacando este esquema seria muito impraticável, uma vez que o tempo de bloqueio resultante é ligeiramente maior do que a soma dos tempos de bloqueio anteriores. Para esclarecer: O atraso é não um atraso antes de devolver a resposta ao navegador. É mais como um timeout ou período refratário durante o qual tentativas de login a uma conta específica ou de um endereço IP específico não serão aceitas ou avaliadas de forma alguma. Ou seja, as credenciais corretas não retornarão em um login bem sucedido, e credenciais incorretas não provocarão um aumento do atraso. A melhor prática #2: Um atraso de tempo médio que entra em vigor após N tentativas falhadas, como por exemplo:
- 1-4 tentativas falhadas = sem atraso
- 5 tentativas falhadas = 15-30 minutos de atraso Atacar este esquema seria bastante impraticável, mas certamente viável. Além disso, pode ser relevante notar que um atraso tão longo pode ser muito irritante para um usuário legítimo. Usuários esquecidos não vão gostar de você. A melhor prática #3: Combinando as duas abordagens - ou um atraso fixo e curto que entra em vigor após N tentativas fracassadas, como:
- 1-4 tentativas falhadas = sem atraso
- 5+ tentativas falhadas = 20 segundos de atraso Ou, um atraso crescente com um limite superior fixo, como:
- 1 tentativa falhada = 5 segundos de atraso
- 2 tentativas falhadas = 15 segundos de atraso
- 3+ tentativas falhadas = 45 segundos de atraso Este esquema final foi retirado das sugestões de melhores práticas da OWASP (link 1 da lista DEVE-LER) e deve ser considerado uma boa prática, mesmo que seja reconhecidamente restritivo. Como regra geral, no entanto, eu diria: quanto mais forte for a sua política de senha, menos você tem que incomodar os usuários com atrasos. Se você precisar de senhas fortes (alfanuméricos sensíveis a maiúsculas e minúsculas + números e símbolos necessários) com 9+ caracteres, você poderia dar aos usuários 2-4 tentativas de senhas não atrasadas antes de ativar o estrangulamento. DoS atacando este esquema de estrangulamento de login final seria muito impraticável. E como toque final, permita sempre a passagem de logins persistentes (cookie) (e/ou um formulário de login com verificação CAPTCHA), para que usuários legítimos ganhem'nem mesmo sejam atrasados enquanto o ataque estiver em andamento. Dessa forma, o ataque DoS muito pouco prático torna-se um ataque extremamente impraticável. Além disso, faz sentido fazer um estrangulamento mais agressivo nas contas de administração, uma vez que esses são os pontos de entrada mais atraentes
PARTE VII: Ataques de Força Bruta Distribuída
Tal como um aparte, os atacantes mais avançados tentarão contornar o estrangulamento de login por ' espalhando as suas actividades':
- Distribuindo as tentativas em uma botnet para evitar a sinalização de endereços IP
- Ao invés de escolher um usuário e tentar as 50.000 senhas mais comuns (que eles podem't, por causa do nosso estrangulamento), eles vão escolher A senha mais comum e tentar contra 50.000 usuários em vez disso. Dessa forma, eles não só conseguem contornar medidas como CAPTCHAs e estrangulamento de login, suas chances de sucesso também aumentam, já que a senha número 1 mais comum é muito mais provável do que a número 49.995
- Espaçar os pedidos de login para cada conta de usuário, digamos, com 30 segundos de intervalo, para se esgueirar para debaixo do radar Aqui, a melhor prática seria logar o número de logins falhados, em todo o sistema, e usar uma média de execução do seu site's bad-login frequency como base para um limite superior que você então impõe a todos os usuários. Muito abstrato? Deixe-me reformular a frase: Digamos que o seu site teve uma média de 120 logins ruins por dia nos últimos 3 meses. Usando isso (média de execução), seu sistema pode definir o limite global para 3 vezes isso -- ou seja, 360 tentativas fracassadas durante um período de 24 horas. Então, se o número total de tentativas falhadas em todas as contas exceder esse número em um dia (ou ainda melhor, monitorar a taxa de aceleração e acionar em um limite calculado), ele ativa a aceleração do login em todo o sistema - o que significa pequenos atrasos para TODOS os usuários (ainda, com exceção dos logins de cookie e/ou logins de backup CAPTCHA). Eu também postei uma pergunta com mais detalhes e uma discussão muito boa sobre como evitar pitfals complicados ao evitar ataques de força bruta distribuída
PARTE VIII: Autenticação de Dois Fatores e Provedores de Autenticação
As credenciais podem ser comprometidas, seja por explorações, senhas sendo escritas e perdidas, laptops com chaves sendo roubadas, ou usuários entrando em sites de phishing. Os logins podem ser ainda mais protegidos com autenticação de dois fatores, que usa fatores fora da banda, como códigos de uso único recebidos de uma chamada telefônica, mensagem SMS, aplicativo ou dongle. Vários provedores oferecem serviços de autenticação de dois fatores. A autenticação pode ser completamente delegada a um serviço de assinatura única, onde outro provedor lida com a coleta de credenciais. Isto empurra o problema para um terceiro de confiança. O Google e o Twitter oferecem ambos serviços SSO baseados em padrões, enquanto o Facebook oferece uma solução proprietária similar.
LINKS DEVEM-LER LINKS Sobre a Autenticação Web
A única maneira prática de enviar credenciais com 100% de segurança é usando SSL. Usar o JavaScript para hash a senha não é seguro. Armadilhas comuns para o hash da senha do lado do cliente:
Don'nunca armazene senhas como texto simples na base de dados. Nem mesmo se você não'não se importa com a segurança do seu próprio site. Assuma que alguns de seus usuários irão reutilizar a senha de sua conta bancária online. Então, armazene a senha de hashed, e jogue fora a original. E certifique-se que a senha não'não apareça nos logs de acesso ou de aplicações. OWASP recomenda o uso de Argon2 como sua primeira escolha para novas aplicações. Se isto não estiver disponível, PBKDF2 ou scrypt devem ser usados em seu lugar. E, finalmente, se nenhuma das opções acima estiver disponível, use bcrypt. Os hashes por si só também são inseguros. Por exemplo, senhas idênticas significam hashes idênticos - isto faz das tabelas de busca de hashes uma forma eficaz de quebrar muitas senhas de uma só vez. Em vez disso, armazene o hash salted. Um sal é uma string anexada à senha antes do hash - use um sal diferente (aleatório) por usuário. O sal é um valor público, portanto você pode armazená-lo com o hash na base de dados. Veja aqui para mais informações sobre isso. Isto significa que você pode't enviar ao usuário suas senhas esquecidas (porque você só tem o hash). Don't redefina a senha do usuário's a menos que você tenha autenticado o usuário (usuários devem provar que são capazes de ler e-mails enviados para o endereço de e-mail armazenado (e validado).
As questões de segurança são inseguras - evite usá-las. Porquê? Qualquer coisa que uma pergunta de segurança faz, uma senha faz melhor. Leia PART III: Usando perguntas secretas em @Jens Roland answer aqui neste wiki.
Após o login do usuário, o servidor envia ao usuário um cookie de sessão. O servidor pode recuperar o nome de usuário ou id do cookie, mas ninguém mais pode gerar um cookie desse tipo (TODO explicar mecanismos). Os cookies podem ser sequestrados: eles são tão seguros quanto o resto do cliente's máquina e outras comunicações. Eles podem ser lidos a partir do disco, farejados no tráfego da rede, levantados por um ataque de scripts em vários sites, phishing a partir de um DNS envenenado para que o cliente envie seus cookies para os servidores errados. Don't envie cookies persistentes. Os cookies devem expirar no final da sessão do cliente (navegador fechado ou deixando o seu domínio). Se você quiser fazer o login automático de seus usuários, você pode definir um cookie persistente, mas ele deve ser distinto de um cookie de sessão completa. Você pode definir uma bandeira adicional que o usuário tem auto-logged in, e precisa fazer log in real para operações sensíveis. Isto é popular em sites de compras que querem proporcionar-lhe uma experiência de compra personalizada e sem descontinuidades, mas ainda assim proteger os seus detalhes financeiros. Por exemplo, quando você retorna para visitar a Amazon, eles lhe mostram uma página que se parece com você're logado, mas quando você vai fazer um pedido (ou mudar seu endereço de entrega, cartão de crédito, etc.), eles pedem que você confirme sua senha. Sites financeiros, como bancos e cartões de crédito, por outro lado, só têm dados sensíveis e não devem permitir o login automático ou um modo de baixa segurança.
Primeiro, uma forte advertência de que esta resposta não é a mais adequada para esta pergunta exata. Definitivamente não deve ser a melhor resposta!
Vou prosseguir e mencionar o BrowserID proposto pelo Mozilla (ou talvez mais precisamente, o Protocolo de Email Verificado) no espírito de encontrar um caminho de atualização para melhores abordagens de autenticação no futuro.
Vou resumir desta forma:
@
domain" é concisa e suportada por uma vasta gama de protocolos e esquemas URI. Tal identificador é, naturalmente, mais universalmente reconhecido como um endereço de e-mail.Isto não é estritamente "autenticação baseada em formulários para websites". Mas é um esforço de transição da norma actual de autenticação baseada em formulários para algo mais seguro: a autenticação suportada pelo browser.