Como validar que um determinado domínio pertence ao usuário?

10

Estou escrevendo um software que será usado principalmente pelas empresas.

Tive então a idéia de oferecer às empresas uma maneira de registrar seu domínio de email, para que todos os usuários que se registrassem em um email do domínio especificado fossem automaticamente colocados no grupo da empresa.

Sei que o Slack faz algo assim e funciona, mas existem alguns problemas ... por exemplo, acabei de registrar "live.it" (a versão em italiano do live.com da Microsoft).

Não posso assumir que, se um usuário validou um email com um domínio específico, é seguro colocar todos os usuários com o mesmo domain_mail no mesmo grupo.

Por exemplo, se eu me registrar com [email protected], não quero permitir que o usuário registre "gmail.com" com seu próprio domínio.

Eu gostaria de evitar o uso de métodos como "colocar um arquivo html na raiz do domínio" ou "definir um registro TXT", então eu queria saber como devo fazer.

Fez Vrasta
fonte
11
Por que pedir para colocar um arquivo na raiz do domínio é um problema para você? As Ferramentas do Google para webmasters fazem exatamente isso. Além disso, você não precisa solicitar um arquivo permanente: o usuário o coloca no servidor, você faz a verificação e o arquivo pode ser removido.
Arseni Mourzenko
9
Se sua configuração é tão errada que usuários externos não conseguem acessar seu site principal, você deve se preocupar com a configuração e culpar seus administradores de sistema, em vez de adicionar seu site às Ferramentas do Google para webmasters e culpar o Google.
Arseni Mourzenko
1
Em vez de lhes dar uma maneira que funciona e que eles já usaram muitas vezes antes?
Arseni Mourzenko
6
@FezVrasta: Lembre-se de que você tem dois objetivos: permitir o acesso a usuários autorizados e negar o acesso a usuários não autorizados. Facilitar para usuários autorizados geralmente também facilita para usuários não autorizados.
MSalters
4
Caso você siga a rota de registro DNS, provavelmente deverá usar registros TXT, não MX.
Aaron Dufour

Respostas:

20

Arquivo no diretório raiz

Não descarte a possibilidade de colocar um arquivo em um diretório raiz do site corporativo. Funciona bem e é amplamente utilizado: as Ferramentas do Google para webmasters é um exemplo dessa técnica. Isso torna essa abordagem atraente: como a maioria dos usuários já conhece, eles não serão perdidos. Além disso, ele não requer nenhum conhecimento técnico, ao contrário da modificação dos registros MX (a maioria das pequenas empresas nem sabe o que é um registro MX).

Para evitar poluir o diretório raiz, você deve pedir para colocar um arquivo apenas ao fazer suas verificações. Depois de encontrar o arquivo, o usuário poderá removê-lo.

Observe que os usuários que não possuem nenhum site corporativo não poderão acessar seu serviço, mas acho que não há muitos clientes nesse caso.

Observe que:

Enviando um email

Enviar um email com link secreto é bastante problemático. Você não pode fazê-lo para [email protected], porque uma determinada pessoa pode não ter um endereço de email corporativo (geralmente é o caso de startups, onde as pessoas preferem usar seu endereço pessoal).

O uso de emails como [email protected] não funcionará em alguns casos.

  • Primeiro, sempre há empresas que não possuem [email protected], [email protected] etc., mas têm seus endereços de email específicos do "sistema" que você não incluiu na lista de permissões. Considere especificamente empresas estrangeiras; por exemplo, na França, não é incomum para usar "Administrat eu r" em vez de "Administrador", incluindo para os endereços de e-mail e nomes de contas.

  • Segundo, muitas pequenas empresas não acessam e não sabem como acessar os e-mails do sistema. Eles pagam nem mesmo sabem que têm [email protected] com centenas de e-mails urgentes aguardando sua resposta.

    Pelo mesmo motivo, você não pode se basear nos registros WHOIS para o endereço de email.

Arseni Mourzenko
fonte
Que tal enviar e-mails de validação para usuários como "info @", "administrator @" "postmaster @"?
Fez Vrasta 25/09
@FezVrasta - os endereços de e-mail são incrivelmente fáceis de falsificar.
Oded
Quero dizer "Eu envio um email para info @ com um link de confirmação"
Fez Vrasta
6
@FezVrasta - um domínio pode não ter nenhum servidor de email associado a ele e, se houver, não há garantia de que um info@(ou qualquer endereço local) seja definido nele ou que ele terá um endereço catch-all monitorado.
Oded
3
msgstr "registra o domínio de email para que todos os usuários que se registram com um email do domínio especificado sejam automaticamente inseridos no grupo da empresa." Desculpe, mas a pergunta deixa claro que você pode assumir um servidor de email. Essa alternativa assume um servidor da Web, o que não é um dado.
MSalters
17

A questão está em vigor: "O que significa possuir um domínio de email?".

A propriedade de um site é definida pela capacidade de colocar um arquivo na raiz . Usuários comuns podem conseguir colocar um arquivo, http://example.com/~user42/validation.txtmas não ativá-lo http://example.com/validation.txt.

Para email, não existe essa hierarquia. No entanto, o postmasterendereço é especial. (Reservado pela RFC2142 ) Você não poderá criar [email protected]. Portanto, a capacidade de criar e / ou acessar postmaster@é a prova de que você precisa para ter um domínio de email.

MSalters
fonte
1
Essa especialidade faz parte de uma especificação, um componente interno comum dos servidores de email ou apenas uma convenção?
DougM
8
@DougM: Reservado pela RFC 2142
MSalters
Obrigado, portanto, um opções adicionais seria o uso de postmaster @, graças
Fez Vrasta
5
@MSalters: Você deve colocar que RFC em sua resposta
Bergi
1
Para muitos postmaster @ domain, simplesmente não vai para a pessoa certa ou para ninguém. Embora tecnicamente possa ser uma maneira de determinar a propriedade do domínio, você praticamente não pode usá-lo.
JamesRyan
10

Vendo em seus comentários que você pode não preferir usar o método de arquivo na raiz do site, uma alternativa que pode funcionar é:

Verificar propriedade usando WHOIS

Você precisaria obter o domínio que está sendo solicitado (por exemplo stackexchange.com) e um dos emails listados na saída WHOIS para esse domínio . (Observe que isso não funcionará para registros secretos / privados, mas se seu público for empresas, isso geralmente não é um problema)

Por exemplo:

WHOIS information for stackexchange.com:**
...
Domain Name: STACKEXCHANGE.COM 
Registrar WHOIS Server: whois.name.com 
Registrar URL: http://www.name.com 
Updated Date: 2014-05-14T16:49:02-06:00 

Registrant Name: Sysadmin Team 
...
Registrant Email: [email protected] 
Admin Name: Sysadmin Team 
Admin Organization: Stack Exchange, Inc. 
...
Admin Email: [email protected] 
Tech Name: Sysadmin Team 
...
Tech Email: [email protected] 
Name Server: cf-dns02.stackexchange.com 
Name Server: cf-dns01.stackexchange.com 
DNSSEC: NotApplicable 

Você pode até fazer a whoispesquisa interativamente e fornecer uma lista suspensa dos e-mails válidos (neste caso, apenas [email protected]). Você enviaria um código / link de verificação para o e-mail escolhido.

Digital Chris
fonte
Isto é o que é feito ao validar certos certificados SSL. Provavelmente não é uma abordagem automática. Mas seria uma boa opção secundária.
GrandmasterB
@GrandmasterB Não vejo por que não foi possível automatizar: pesquisa de quem, receber os emails, deixar o usuário escolher um, enviar código de validação por email.
Digital Chris
Eu testei dessa maneira com dois dos meus maiores clientes e ambos não têm um email válido no whois (um não tem emails, o outro tem o email do suporte técnico do registrante do domínio ...
Fez Vrasta,
1
A propósito, este poderia ser adicionado como uma alternativa.
Fez Vrasta 26/09
6

Peça aos usuários que adicionem um registro TXT ao domínio com uma referência à conta de usuário em seu site (nome de usuário, ID ou um token arbitrário gerado ao solicitar ao usuário que verifique o domínio).

Lembro-me de adicionar um registro chamado adn_verification=<my user name>em uma rede social para exibir meu domínio como verificado, e achei muito legal e não exige que você tenha o domínio apontando para um servidor web.


fonte
Uma grande parte dos usuários não sabe o que é o registro TXT e aqueles que o conhecem não têm necessariamente conhecimento suficiente para defini-lo.
Arseni Mourzenko
1
@MainMa ainda é um bom recurso para implementar.
1
+1. Só porque você tem um domínio, não significa que você tenha um servidor da Web em execução (embora nesse caso em particular, uma empresa provavelmente sempre tenha um site :)).
Matt
FWIW, esta é a abordagem que a Microsoft usa se você deseja um domínio personalizado para o Office 365.
Casey
2

Para adicionar as sugestões já existentes na página: recomendo que o usuário tenha opções sobre como ele valida seu domínio. As outras sugestões da página são perfeitamente utilizáveis, mas às vezes você está na situação em que alguém que deseja verificar seu domínio apenas tem acesso limitado ao servidor ou mesmo ao site. Por exemplo, seu usuário pode não conseguir adicionar registros ou arquivos de domínio na raiz do domínio.

Por exemplo, Troy Hunt permite que os usuários pesquisem um domínio inteiro em seu banco de dados de contas comprometidas, mas é necessário verificar primeiro. Ele oferece ao usuário a escolha de 4 métodos:

  1. Via email;
  2. através de uma meta tag;
  3. Um upload de arquivo;
  4. um registro TXT.

Nos quatro casos, ele exige que o usuário insira um valor específico em algum lugar no qual ele verifique.

A explicação está em http://www.troyhunt.com/2014/01/im-pwned-youre-pwned-were-all-pwned.html .

Nzall
fonte
obrigado, mas como funciona a verificação de email? Como eles podem me impedir de validar um domínio "gmail.com" ou "hotmail.com"? (ou melhor, algum serviço de webmail gratuito desconhecido).
Fez Vrasta 26/09
Não importa o que você faça, a menos que você diga explicitamente "esses endereços NUNCA podem ser validados", sempre existe a chance de o provedor de webmail registrar seu próprio domínio, e não há muito o que você possa fazer sobre isso. A única coisa que você pode fazer é impedir que alguns domínios sejam totalmente validados. Você não precisa impedir a validação do mailprovider.com, apenas o [email protected] consegue validar todo o domínio mailprovider.com em seu nome.
Nzall 26/09/14
ok, mas não tenho como saber se um email faz parte de uma empresa ou de um serviço de webmail gratuito.
Fez Vrasta 26/09
1
Você terá que manter uma lista branca para isso, receio. Outra opção é que todo domínio precise ser aprovado por um ser humano. Sei que isso torna mais problemático para novos candidatos, mas uma aprovação precisa acontecer apenas uma vez. Depois, você sabe que esse domínio é aprovado e não é um serviço de webmail gratuito.
Nzall 26/09/14
0

Você poderia evitar o uso de webmails gratuitos para registro?

Isso é o que Brium faz: você não pode assinar-in com um @gmail.com, @live.com, etc e-mail - você tem que usar o seu próprio.

E isso te agarra por isso.

Se você tem como alvo empresas, esse deve ser um bom caminho a percorrer.

Você ainda pode ter o problema de saber quem é o chefe (digamos, o administrador desse grupo), mas pode não ser tão importante - o chefe provavelmente deve ter as ferramentas para dizer a qualquer funcionário que transfira a propriedade para ele, desde que alguém registrado antes do chefe.

mgarciaisaia
fonte
3
Como você verificaria se um domínio é um webmail gratuito? Existem pelo menos centenas deles.
svick
Eu estava escrevendo a mesma coisa :)
Fez Vrasta
Aqui está um projeto não tão ativo que lista vários deles: github.com/tarr11/Webmail-Domains . É tão crítico que algum deles escorregue? Não é suficiente cobrir a grande maioria dos usuários (Gmail, Live, Yahoo e outros)? Não sei o que o seu software faz, mas - será útil alguém tentar evitar essa limitação? O software seria útil se ele estivesse sozinho em um grupo - ou sem seus colegas?
Mgarciaisaia
Isso permitiria um acesso básico às informações enviadas para o meu software, para que um usuário indesejado no grupo errado pudesse causar problemas. Pela maneira que poderia ser uma solução, porque será um problema do titular dos dados se registrar um domínio não própria ... Eu acho
Fez Vrasta