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.
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.
fonte
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.
fonte
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"
fonte
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.
fonte