Como proteger o envio de pontuações de jogos HTML5 para o meu servidor

13

No back-end, estou usando java. Eu tenho um jogo em HTML5; quando o usuário o envia, envia uma chamada do Ajax para salvar a pontuação no banco de dados. Agora, alguém pode facilmente usar ferramentas como o Fiddler e o firebug para modificar essa solicitação ajax e enviar uma pontuação muito melhor ao servidor. Como garantir que o usuário não possa manipular pontuações!

Deepak Singhal
fonte

Respostas:

18

Não basta enviar uma pontuação inteira para o servidor. Envie uma coleção de estatísticas do jogo que possam ser usadas para verificar se a pontuação foi realista. Ou você pode implementar alguma chave pré-compartilhada para calcular a pontuação. Você pode enviar pontuações e estatísticas incrementais ao longo do jogo e garantir que o aumento seja razoável.

No entanto, eu não me preocuparia muito com isso. As sugestões acima tornarão mais difícil, mas não impossível, o envio de uma pontuação falsa. No entanto, se você apenas tornar um pouco difícil, a grande maioria das pessoas que joga seu jogo não estará interessada em tentar enganá-lo.

Tenha cuidado com o modo como você está permitindo que seu jogo se comunique com seu servidor. Você não quer que seu jogo seja um ponto de entrada no seu servidor para hackers. Sempre valide sua entrada e nunca confie no cliente.

MichaelHouse
fonte
6
Consulte programmers.stackexchange.com/questions/150127/… e gamedev.stackexchange.com/questions/37392/… para concluir com "Nunca confie no cliente"
dievardump
@ Byte56 nenhuma forma de ofuscação ou criptografia protegerá seu código de um depurador usado para modificar os dados do jogo durante o jogo. Se a jogabilidade acontecer no cliente, é essencialmente impossível evitar essa forma de trapaça. Um navegador habilitado para Javascript não é um dispositivo de computação confiável.
MarkRel
10

Como disse Byte56: "nunca confie no cliente", mas:

Nunca confiar no cliente tem um preço:
ter todos os jogos sendo jogados no servidor aumentará muito o custo da sua infraestrutura.

Supondo que a maioria dos jogadores não trapaceie
e que o recorde máximo se acalme depois de um tempo e pare de mudar muito

existe um caminho do meio.

Grave os jogos (no cliente).
(Dependendo do tipo de jogo que pode ser super fácil (por exemplo, xadrez) ou um pouco complicado (por exemplo, um FPS multiplayer),
mas é sempre possível.)

Quando um jogador termina um jogo, basta enviar a pontuação.
Se a pontuação estiver dentro de um determinado intervalo no topo (por exemplo, 1% ou 5 melhores),
solicite os dados gravados ao jogador
e reproduza esse jogo no servidor.
Se a pontuação corresponder, aceite a pontuação.

Dessa forma, você não precisa de recursos adicionais do servidor para a maioria das jogadas,
mas pode garantir que as melhores pontuações sejam válidas.

Andreas
fonte
2
Em outras palavras, quem se importa se enganar por algo que não seja a pontuação mais alta (por que eles fariam isso de qualquer maneira?), Portanto esses são os únicos que você precisa validar.
Jhocking
4

Não se preocupe com isso; proteger de todos os ataques é essencialmente impossível se você confiar no cliente. Se ninguém usa o Fiddler etc, para modificar a solicitação AJAX, ele pode simplesmente ativar um depurador JS e modificar os dados do jogo para se dar 1000 vidas, etc, ou modificar seu código ou fazer 100 outras coisas que você não imaginava.

Eu escrevi esse jogo há vários anos e, pelo que sei, ninguém trapaceou dessa maneira. Não houve prêmio, exceto ter seu nome na tabela de pontuação.

MarkR
fonte
4

Reduza a motivação social para trapacear, por exemplo, usando tabelas de classificação social (trapacear apenas faz você parecer bom para um punhado de amigos, não estraga tudo para todos).

Verifique no servidor. Joel Poloney teve um bom resumo de técnicas no Game Developer 2012 September "Scale Your Online Game"

Vincent Scheib
fonte
2

Quando você deseja criar um jogo on-line à prova de trapaças, precisa lidar com toda a lógica do jogo no servidor. Tudo o que acontece no lado do cliente pode ser controlado e manipulado pelo usuário. Existem técnicas como criptografia ou ofuscação que você pode tentar, mas, no final, tudo é apenas segurança através da obscuridade, que pode ser contornada por alguém suficientemente determinado.

Certamente, um jogo executado no servidor é muito mais complicado de desenvolver, requer muito mais recursos do lado do servidor e a latência da rede é prejudicial para a experiência do jogo (especialmente para jogos rápidos), mas é a única maneira de efetivamente impedir que os jogadores trapaceiem.

Philipp
fonte
Mesmo isso não impedirá todas as trapaças - apenas as coisas óbvias "sim, eu tenho um bazilhão de pontos". Como algo precisa ser executado no cliente, eles acabam tendo algum controle, independentemente. No mínimo, qualquer cliente - particularmente um navegador da web - é programável.
precisa saber é