Programação em torno da diferenciação entre maiúsculas e minúsculas de endereços de email


8

Como muitos sites, usamos endereços de email como identificadores de usuários para logins.

A RFC 5321 [ # 2.3.11 ] afirma que as partes locais dos endereços de email:

DEVE ser interpretada e semântica atribuída apenas pelo host especificado na parte do domínio do endereço

Isso significa que os aplicativos que processam endereços de e-mail não podem adivinhar, por exemplo, a maneira como o GMail ignorará pontos ao determinar nomes de usuários . Isso também significa que os aplicativos devem tratar as partes locais do endereço de email com distinção entre maiúsculas e minúsculas, pois é assim que a parte local é especificada .

No entanto, os usuários são estúpidos e, em um caso recente, um usuário que se inscreveu com um endereço de e-mail em maiúscula (e recebeu e clicou com êxito no e-mail de verificação) descobriu que não conseguiu fazer o login porque agora estava usando o formato em minúscula do e-mail endereço.

Nunca encontrei um servidor de e-mail que aplicasse a distinção entre maiúsculas e minúsculas em suas caixas de entrada. Não duvido que alguns existam em algum lugar, mas estou questionando se não há um benefício maior em eliminar a distinção entre maiúsculas e minúsculas para nossos nomes de usuário de e-mail do que problemas em mantê-lo.

Eu não chegaria ao ponto de imitar o processamento de pontos do GMail, ou qualquer tipo de endereçamento positivo , porque eles não parecem tão onipresentes ou assumidos automaticamente como diferenciam maiúsculas de minúsculas. No entanto, sei que não é um cenário em preto e branco, por isso estou interessado se alguém souber o quanto os endereços de email com distinção entre maiúsculas e minúsculas são realmente.


5
Duas respostas já da mesma RFC. Da próxima vez, certifique-se de ler a coisa toda :)
yannis

Existem duas respostas para essa pergunta. Não use o endereço de email como nome de usuário. Use a mesma manipulação de cadeia de caracteres na entrada do usuário e no valor armazenado no banco de dados; se não corresponderem nesse ponto, não serão iguais.
Ramhound

O Yahoo costumava ter nomes de usuário com distinção entre maiúsculas e minúsculas nos dias muito, muito antigos. Como meados dos anos 90. Jogos hackers do yahoo muito divertidos. . .
Wyatt Barnett

Por que não apenas impor a distinção entre maiúsculas e minúsculas em seus identificadores de usuário, convertendo-os em um caso interno padrão durante o login? Seu banco de dados ainda pode armazenar o endereço de email com distinção entre maiúsculas e minúsculas para quando você precisar enviar um email ao usuário (para recuperação de senha etc.). Parece ser extremamente improvável que você tenha dois usuários diferentes cujos endereços de email diferem apenas no caso da parte local.
Mark Booth

@YannisRizos eu li, mas um DEVE ser sempre superado nos RFCs por uma obrigação. O fato de que os hosts DEVEM fazer algo significa que eles não podem, e eu só queria garantir que, na realidade, o DEVE ser um pouco mais amplamente adotado do que sua definição implica.
Gareth

Respostas:


17

http://tools.ietf.org/html/rfc5321#page-42 (ênfase adicionada):

Enquanto a definição acima para parte local é relativamente permissiva, para máxima interoperabilidade, um host que espera receber e-mails DEVE evitar definir caixas de correio onde a parte local requer (ou usa) o formulário de cadeia de caracteres entre aspas ou onde a parte local é o caso -sensível.

O rfc desencoraja a distinção entre maiúsculas e minúsculas. Além disso, eu pessoalmente nunca vi um host com partes locais que diferenciam maiúsculas de minúsculas.

Endereços de email que não diferenciam maiúsculas de minúsculas são um padrão de fato.

Portanto, acho que você está certo ao dizer que há um benefício maior em eliminar a distinção entre maiúsculas e minúsculas nos nomes de usuário de e-mail do que problemas em mantê-lo.


5

Ponto 2.4. Princípios gerais de sintaxe e modelo de transação dos estados RFC 5321 (grifo meu):

Portanto, implementações SMTP DEVEM ter o cuidado de preservar o caso de peças locais da caixa de correio. Em particular, para alguns hosts, o usuário "smith" é diferente do usuário "Smith". No entanto, explorar a distinção entre maiúsculas e minúsculas das peças locais da caixa de correio impede a interoperabilidade e é desencorajado. Os domínios de caixa de correio seguem regras normais de DNS e, portanto, não diferenciam maiúsculas de minúsculas.

AFAIK todos os hosts de email populares evitam emails com distinção entre maiúsculas e minúsculas, e você também deve. Não usei um serviço que assumisse a distinção entre maiúsculas e minúsculas para e-mails e odeio ser surpreendido.


4

O que você deve fazer é usar o endereço de e-mail fornecido para enviar e-mails e transformá-lo em algo menos propenso a erros ao usá-lo como um identificador de conta ou pelo menos usá-lo como substituto quando você não encontrar uma correspondência exata.

Isso seria um análogo muito grosseiro ao que o algoritmo Soundex faz para palavras ou nomes em inglês, removendo as coisas que criam ambiguidades. Por exemplo, você pode converter o endereço inteiro em minúsculas e remover sub-endereços e símbolos não alfanuméricos da parte local (por exemplo, Lance.Boyle+sometag@Example.comreduziria para lanceboyle@example.com). A aplicação da mesma transformação a qualquer endereço usado durante o login proporcionaria uma correspondência para mais variantes, e o usuário não é o mais sábio, pois qualquer outro uso do endereço seria a versão fornecida.

Do ponto de vista técnico, isso facilita seus logins marginalmente à força bruta. Se isso for um problema, você sempre pode exigir uma correspondência exata para logins e fornecer uma opção "esqueci meu login ou senha" que seja tolerante ao procurar a conta, pois qualquer email enviado será para o endereço "certo".

Se um endereço como o descrito acima passar por toda a inscrição e verificação, acho que não seria razoável rejeitar outros que se transformam da mesma maneira que as duplicatas. Eu postular que qualquer site que atribui endereços locais como Lance.Boyle, LanceBoyle, lance.boylee lanceboylee trata-los como diferentes pode ser a fonte de outros tipos de problemas.


Não tenho certeza se chegaria a ponto de tirar os pontos - acho que não faria distinção entre maiúsculas e minúsculas ao verificar logins - mas, fundamentalmente, isso é o que eu sugeriria também.
Murph

1
Definitivamente não iria tirar os pontos. O Google encontra pessoas chamadas, por exemplo, "Robert Oot" e "Richard Oot", que podem ter endereços de e-mail como "r.oot@somedomain.com". Retire os pontos e você poderá ter um conflito. :-)
Carson63000 5/12

Esse conflito em particular não é provável, pois o superusuário provavelmente não está se inscrevendo para contas em sites, mas você tem razão. Uma possibilidade seria retirar apenas pontos de domínios em que se sabe não importar e que podem ser a fonte de muitos usuários gmail.com.
Blrfl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.