É suficiente proteger uma página de status do pedido apenas por um URL aleatório?


11

Depois que um cliente (corporativo) comprou alguns itens em nossa loja online, enviamos um email com uma visão geral do que ele comprou.

Gostaríamos de informar nosso cliente sobre pagamentos recebidos, rastreamento de pacotes etc. Eu resolveria isso atribuindo a cada pedido um ID aleatório e adicionando um link a cada email. O link pode ser assim: http://shop.foo.bar/order/rwklvc46g9wt7kvy09f1

Você tomaria medidas adicionais para proteger os dados? Ou escolher uma solução completamente diferente?

Vantagens:

  • nenhuma atualização de status por email (especialmente se ocorrerem atualizações frequentes)
  • fonte de informação única (nunca desatualizada)
  • compartilhável (por exemplo, para seu chefe ou colegas)

Desvantagens:

  • dados privados expostos em sites acessíveis ao público (por exemplo, números de telefone, detalhes de pagamento)

4
Olá Dan, bem-vindo ao Webmasters. Você parece ter criado dois usuários idênticos (?) E editado sua pergunta com o outro "Dan" - por isso, está em uma fila aguardando aprovação. O usuário que faz a pergunta sempre pode editar suas próprias perguntas livremente e fazer comentários sobre as respostas etc. O outro "Dan" não tem reputação suficiente para fazer uma dessas perguntas - porque não fez a pergunta.
MrWhite

Respostas:


8

Sem segurança adicional, não. URLs aleatórios são rastreados o tempo todo. No entanto, isso é bom quando feito com uma página de logon para autenticar o usuário.

Uma solução intermediária é garantir que a página de status não contenha dados pessoais, apenas informações gerais. Por exemplo, "PAGO PELO CC" em vez de "PAGO PELO VISA 1234567891" e "Enviado" em vez de "Enviado para John Doe, 123 Blue Street" etc.


0

Eu acho que você deveria proteger mais esses dados. Quanto à simplicidade do sistema, concordo plenamente que URLs públicos com uma sequência aleatória e única são suficientes e úteis.

No entanto, se os métodos de pagamento (incluindo informações do cartão de crédito), e-mails ou telefones forem exibidos, você precisará proteger esses dados. Também depende de qual parte do mundo você é, mas na maioria delas essa necessidade se estende a questões legais e à proteção de dados do usuário.

O que a maioria dos sites de compras faz para esse tipo de situação é solicitar credenciais (login / senha) ou um número de rastreamento com um código de rastreamento ou algo que somente o usuário ou as partes confiáveis ​​do usuário possam ter.


-1

Sim, basta, desde que:

  1. você acabou de enviar o link por e-mail e não o envia ao Google. Mas, de acordo com a sua pergunta, é isso que você faz, portanto não há como o Google conhecer o link, pois ele nunca será indexado / rastreado.

  2. você torna o ID usado no link aleatoriamente e suficientemente longo. Se não for aleatório, mas você usar um número inteiro incremental simples como ID, um de seus clientes poderá identificar facilmente que, digitando números incrementalmente simples no link, ele poderá ler todos os outros pedidos. Se for aleatório, mas não o suficiente (digamos que seja composto de apenas 4 dígitos / letras), seria fácil, mesmo com um PC doméstico, atacar suas ordens por força bruta, eu só precisaria tentar (26 + 10) ^ 4 = 1.679.616 combinações possíveis. Digamos que eu execute um script que tente um link por segundo, o script levaria menos de 20 dias para forçar brutalmente todos os links possíveis e ler todos os seus pedidos.

  3. IMPORTANTE: para maior segurança, você deve excluir o link após um determinado número de dias (ou seja, após 1 mês). Esse é o truque para torná-lo seguro. Dessa maneira, mesmo que alguém tente forçar seus links com força bruta, ele precisará de um grande poder de cálculo, caso contrário, seu ataque nunca será rápido o suficiente para tentar todas as combinações possíveis antes de serem excluídas. E mesmo que ele possua uma enorme capacidade de cálculo, dificilmente seria capaz de testar mais de um link por segundo, porque o servidor que gerencia seus pedidos pode começar a recusar sua conexão se tentar se conectar repetidamente uma vez por segundo. FYI: excluir o link, não significa que você precise excluir todo o pedido no banco de dados. Você pode usar outra chave primária para a tabela de pedidos (um simples incremento automático) e usar um campo UNIQUE (que permite NULL) chamado link_id que é o que você digita no link. Após um mês, você simplesmente precisa excluir o valor de link_id e defini-lo como NULL. Dessa forma, o pedido ainda estará na tabela e poderá ser visualizado no painel do administrador, mas o link direto não será mais válido para visualizar diretamente a página do pedido.

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.