No nosso site, disponibilizamos aos utilizadores uma simulação baseada nas suas informações privadas (fornecidas através de um formulário). Gostaríamos de permitir que eles recuperassem os resultados da simulação mais tarde, mas sem forçá-los a criar uma conta de login / senha.
Pensamos em enviar a eles um e-mail com um link, a partir do qual eles poderão obter seus resultados. Mas, naturalmente, temos que proteger essa URL, porque dados privados estão em jogo.
Portanto, pretendemos passar um token (como uma combinação de letras e dígitos de 40 caracteres, ou um Hash MD5) na URL e usar SSL.
Finalmente, eles receberiam um e-mail como este:
Olá,
volte seus resultados em https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn
O que você acha disso? É seguro o suficiente? O que você me aconselharia para a geração de tokens? Que tal passar parâmetros de URL em uma solicitação https?
Respostas:
SSL protegerá os parâmetros de consulta em trânsito; entretanto, o e-mail em si não é seguro, e o e-mail pode pular em qualquer número de servidores antes de chegar ao seu destino.
Além disso, dependendo do seu servidor web, o URL completo pode ser registrado em seus arquivos de log. Dependendo de quão sensíveis são os dados, você pode não querer que seu pessoal de TI tenha acesso a todos os tokens.
Além disso, o URL com a string de consulta seria salvo no histórico do usuário, permitindo que outros usuários da mesma máquina acessassem o URL.
Por fim, e o que torna isso muito inseguro, é que a URL é enviada no cabeçalho Referer de todas as solicitações de qualquer recurso, mesmo de recursos de terceiros. Portanto, se você estiver usando o Google Analytics, por exemplo, enviará ao Google o token de URL e tudo para eles.
Na minha opinião, isso é uma má ideia.
fonte
Eu usaria um cookie para isso. O fluxo de trabalho deve ser assim:
Agora, o usuário deseja usar um navegador diferente em uma máquina diferente. Nesse caso, ofereça um botão de "transferência". Quando a usuária clicar neste botão, ela receberá um "token". Ela pode usar esse token em outro computador para redefinir o cookie. Dessa forma, o usuário decide o quão seguro deseja transferir o token.
fonte
SSL protege o conteúdo dos dados em trânsito, mas não tenho certeza sobre o URL.
Independentemente disso, uma maneira de atenuar a reutilização desse token de URL por um invasor é garantir que cada token só seja usado uma vez. Você pode até definir um cookie para que o usuário legítimo possa continuar a usar o link, mas após o primeiro acesso ele só funcionará para alguém com o cookie.
Se o e-mail do usuário for comprometido e um invasor obtiver o link primeiro, você está bloqueado. Mas o usuário também tem problemas maiores.
fonte
O e-mail é inerentemente inseguro. Se alguém pode clicar nesse link e acessar os dados, você não os está protegendo.
fonte
Bem, o token é seguro ao passar por SSL. O problema que você vai ter é que ele está disponível para as pessoas (aquelas a quem não se destina) por ser capaz de visualizar a URL.
Se for uma informação privada, como SSN, não acho que enviaria uma URL por e-mail. Prefiro que eles criem um nome de usuário e uma senha para o site. É muito fácil comprometer um e-mail com esse tipo de informação em jogo para você e para eles. Se a conta de alguém for comprometida, será questionado de quem é realmente a culpa. Quanto mais seguro, melhor você é do ponto de vista estritamente CYA.
fonte
Eu realmente não consideraria isso seguro o suficiente para uma situação em que há sérios problemas de privacidade. O fato de você estar enviando a URL em um e-mail (provavelmente em texto não criptografado) é de longe o link mais fraco. Depois disso, há o risco de ataques de força bruta aos tokens, que (sem a estrutura de um mecanismo de autenticação real) provavelmente são mais vulneráveis do que uma configuração de nome de usuário e senha bem construída.
Aliás, não há problemas com os parâmetros de uma solicitação https.
fonte
Do jeito que está, seria uma má ideia. Você vai assustar a segurança com fácil uso. Como dito antes, o SSL protegerá apenas a transferência de informações entre o servidor e o navegador do cliente e impedirá apenas o ataque de intermediário. Os emails são muito arriscados e inseguros.
O melhor seria uma autenticação de nome de usuário e senha para acessar as informações.
Eu gosto mais ou menos da ideia do biscoito. Você também deve criptografar as informações do cookie. Você também deve gerar o token com salt e frase-chave mais o $ _SERVER ['HTTP_USER_AGENT'] para limitar a probabilidade de um ataque. Armazene o máximo de informações não sensíveis sobre o cliente no cookie para uso de verificação.
A frase-chave pode ser armazenada no cookie para facilitar o uso, mas tenha em mente que o cookie também pode ser roubado = (.
Melhor deixar o cliente digitar a frase-chave que ele forneceu, que também é armazenada no banco de dados junto com seus dados.
Ou, a chave pode ser usada no caso da pessoa usar uma máquina diferente que difere nos parâmetros $ _SERVER ['HTTP_USER_AGENT'] ou simplesmente perder o cookie. Portanto, o cookie pode ser transferido ou definido.
Certifique-se também de que os dados confidenciais sejam criptografados no banco de dados. Nunca se sabe ;)
fonte
Você está ciente de que se qualquer hacker tiver acesso ao seu banco de dados, muitas informações pessoais podem ser fornecidas gratuitamente?
Depois disso, eu diria que não é má ideia. Eu não usaria MD5 ou SHA1 porque eles não são muito seguros para hash. Eles podem ser "descriptografados" (eu sei que não é criptografia) com bastante facilidade.
Caso contrário, talvez eu usaria uma segunda informação que não seria enviada por e-mail, tipo de senha. O motivo é bastante simples, se alguém obtiver acesso ao e-mail do usuário (bastante fácil com o hotmail se você não finalizar sua sessão), ele terá acesso a todas as informações que o usuário enviou.
Observe que o HTTPS protegerá e criptografará os dados enviados do seu site para o usuário final. Nada mais, tome-o como um túnel seguro. Nada mais nada menos.
fonte
Pelo que entendi da sua ideia, em teoria, alguém poderia digitar uma string aleatória de 40 caracteres ou hash MD5 e obter os detalhes de outra pessoa. Embora isso possa ser altamente improvável, só precisa acontecer uma vez.
Uma solução melhor pode ser enviar ao usuário um token e, em seguida, pedir-lhe que insira alguns dos detalhes, como nome, código postal, ssn ou uma combinação deles.
fonte