A melhor maneira de verificar se um usuário concluiu uma tarefa em outro site.

5

Estamos desenvolvendo um site para os alunos em que eles primeiro precisam cumprir tarefas específicas para usar nosso serviço. O problema é que essas tarefas estão em outro site, que não tem nada a ver com o nosso e está atualmente colocado em um iframe em nossa página. Uma coisa que pode ser mencionada é que, após o usuário terminar a tarefa (no outro site), um novo site é aberto, o que indica que ele terminou. Então, nossa pergunta seria: É possível obter uma verificação do outro site, que o usuário tenha preenchido a tarefa? Primeiro, pensamos em ler o "nome da classe de span" específico da página em que o usuário está por último. O problema aqui é a "mesma política de origem". Você conhece uma maneira melhor de resolver isso ou uma maneira legal e econômica de contornar essa política? Obrigado pela ajuda!

Ps: Eu sou um estudante de bacharelado em informática, então ainda estou aprendendo, se houver alguns erros lógicos no meu qestion. (:

    
por D_Burg 03.03.2016 / 00:39
fonte

1 resposta

1

Você tem essencialmente duas maneiras de conseguir isso.

Chamando uma API

Quando o usuário afirma que terminou as tarefas no site de terceiros, ligue para a API deste site, pedindo para confirmar que as tarefas já foram realizadas. Se assumirmos que você confia no terceiro e no canal entre você e o servidor de terceiros, isso garante que o usuário realmente executou as tarefas necessárias.

Possíveis problemas:

  • O site de terceiros não fornece essa API.

  • Você não pode corresponder de maneira confiável o usuário local ao usuário do site de terceiros.

Exemplo:

Imagine que a tarefa é armazenar um determinado arquivo no Google Drive, com um nome específico. Depois que o usuário finalizar a tarefa, ele volta ao seu site / aplicativo móvel. Seu site / aplicativo para dispositivos móveis pode usar o OAuth para associar a conta do Google ao usuário e, mediante autorização específica, acessar o arquivo no Google Drive ou pelo menos verificar se o arquivo existe.

Confiando no usuário

Se a primeira alternativa não puder ser feita, você deve confiar no usuário quando ele disser que ele realmente executou as tarefas.

Você não deve necessariamente perguntar ao usuário se ele fez as tarefas, com uma opção sim / não; Em vez disso, você pode verificar o conteúdo do <iframe> ou verificar os URLs que foram usados pelo link <iframe> (talvez significa que o usuário finalizou a tarefa, enquanto o link significa que o usuário falhou?

A questão é que, assim que você fizer essas verificações no lado do cliente , estará condenado. Você está realmente confiando no cliente para lhe dizer a verdade. Você pode tornar mais fácil para o cliente enganar, dando uma opção sim / não dentro de um formulário, ou você pode dificultar, ofuscando um pedaço de código JavaScript que faria alguma magia negra com o <iframe> ; no entanto, assim que o código é executado no lado do cliente, ele pode (e, se houver benefícios para fazer isso) ser adulterado.

Se tiver certeza de que pode confiar em seus usuários, você poderá abordar os aspectos técnicos reais por meio do StackOverflow. Se você conseguir fazer com que terceiros modifiquem sua página, envio de mensagens entre documentos seria mais fácil e direto solução aqui (sendo também relativamente fácil adulterar um usuário que queira trapacear).

É claro que, se você tiver influência sobre terceiros, poderá desenvolver uma solução em conjunto, que também usa um par de chaves público-privado para criptografar os dados que passam pelo usuário. O usuário se torna meramente um transportador dos dados e não pode adulterá-lo. Dito isto, se você tem esse tipo de poder sobre o terceiro, por que não pedir a eles que façam uma API?

Possíveis problemas:

  • O usuário pode afirmar que fez as tarefas, mesmo que não tenha feito isso. Não há nada que você possa fazer para impedir completamente a trapaça aqui (a menos que você possa trocar um par de chaves com o terceiro).

  • As soluções mais fáceis exigem a alteração do site de terceiros; se você tem esse tipo de poder, você não poderia simplesmente pedir ao terceiro para desenvolver uma API?

Exemplo:

Antes de realizar algo no seu site, o usuário precisa fazer algumas perguntas. Existe um serviço de terceiros - um site que hospeda perguntas e coleta respostas dos usuários (e verifica se as respostas estão corretas).

Você começa gerando um UID criptografado com uma chave pública que foi fornecida anteriormente pelo terceiro. Em seguida, você redireciona o usuário para o site de terceiros, especificando o UID criptografado no URI; o usuário não pode ler o UID, porque ele não tem a chave privada.

Quando o usuário responde às perguntas, o site de terceiros redireciona o usuário de volta ao seu site e acrescenta ao URI alguns dados que contêm o UID, bem como o status de sucesso / falha, criptografados com a segunda chave pública , aquele que você forneceu anteriormente ao terceiro. Depois de receber esses dados, você pode ter certeza de que o usuário não o adulterou, mesmo que ele conheça as duas chaves públicas: como o usuário não pode saber o UID original, a presença do UID autêntico garante que a mensagem foi criptografado por terceiros.

Como você pode ver, não há nada particularmente complicado para alguém que esteja familiarizado com a criptografia, e há muitos riscos a falhar para alguém que não é. Novamente, uma API simples é uma abordagem muito mais direta.

    
por 06.07.2016 / 23:24
fonte