Question

Je travaille sur le back-end pour un jeu Flash et je dois sécurisé les données vont dans le tableau de bord.

Le jeu va être hébergé sur de nombreux sites dans un bandeau publicitaire, l'utilisateur va jouer le jeu dans l'annonce puis cliquer sur le site principal pour enregistrer les détails.

En ce moment je pense le long des lignes de ce

  1. L'utilisateur joue le jeu et clique pour soumettre leur score
  2. Dans l'arrière-plan, la bannière envoie le score et le domaine d'origine d'un script sur le site principal.
  3. Le script vérifie le domaine est l'un des domaines valides l'annonce est hébergé sur.
  4. Si tout est correct, le script crée un hachage de cette partition et le domaine et le stocke dans la base de données le long du côté de la partition.
  5. Le script retourne le hachage Flash dont il bricole sur le querystring d'un getURL qui ouvre le tableau de bord principal
  6. La page tableau de bord vérifie le referer pour vous assurer qu'il est l'un des domaines valides.
  7. Si elle est elle vérifie alors la base de données pour le hachage si c'est un jeton valide
  8. l'utilisateur remplit alors dans leurs détails et le dossier est mise à jour basée sur le hachage

La dernière fois que j'ai vérifié ne FLash pas envoyer les informations referer, qui jette un peu une clé dans mon plan. Alors, est-il un modèle déjà mis en place pour ce genre d'interaction Flash / base de données?

Quel genre de Hashage / Checksuming dois-je utiliser à l'étape 4? Quel est le nom correct pour ce genre d'opération, est un hachage, une somme de contrôle ou autre chose?

Je comprends qu'être une technologie clientside, Flash ne sera jamais réellement être sûr QUE, mais dans mon esprit, quelque chose comme ce qui précède est à peu près aussi dificile que vous allez faire pirater ce genre d'application.

MISE À JOUR: Mon objectif principal est de rendre plus difficile pour les gens à trouver l'URL du script qui ajoute le score à la base de données et simplement le spam avec des scores faux

.

Merci, Greg

Était-ce utile?

La solution

Je l'ai déjà travaillé dans l'industrie du jeu, et a fait quelque chose le long de ces lignes. A ma connaissance, personne n'a jamais pris la peine de fissuration le score présentant une partie.

La façon dont il a été fait était:

  1. Générer un nombre aléatoire sous forme de sel (de flash)
  2. Coder le score en utilisant des opérations mathématiques, sur la base du sel (de flash)
  3. Ajoutez une somme de contrôle pour assurer qu'il n'y avait pas de trempe sur le score (de flash)
  4. Envoyer le score et toutes les données nécessaires à la page de soumission de score
  5. Sur le serveur, valider que le score n'a pas été trempé en utilisant la somme de contrôle
  6. Si le score est valide, puis l'insérer dans la base de données, sinon, rejeter
  7. Si vous voulez, vous pouvez connecter les adresses IP des auteurs des scores qui violent les checksums (peut-être une politique de trois mauvais checksums, vous êtes dehors) et ajouter un script pour les interdire d'accéder au serveur pour 1 h, mais ne sera probablement pas nécessaire à moins que quelqu'un veut casser votre code mauvais.

Note:  Le hachage / checksuming a été faite en utilisant une fonction personnalisée. N'a pas besoin de quelque chose de très sûr. Il a été fait à l'aide d'un calcul sur le sel et le score. Certaines opérations mathématiques simples comme des sommes, multiplications et soustractions.


Modifier : un algorithme simple / mathématiques pour la somme de contrôle

Disons que votre utilisateur a un score de 5885 .
La génération d'un nombre aléatoire en tant que sel de 134789 (longueur constante, pad avec 0)

cryptedScore = Score * Sel (vous devez utiliser quelque chose d'un peu plus complexe, mais il est juste un exemple)

Dans notre exemple, le score crypted serait: 793233265

Maintenant, pour la somme de contrôle, permet de dire que vous voulez avoir une valeur de 253 comme une somme de contrôle.
Vous ajoutez tous les numéros de votre score crypted + 9 + 7 3 + 2 + 3 + 3 + 2 + 6 + 5 = 40

Maintenant, vous calculez la valeur de votre somme de contrôle pour ce score
253 - (Somme des nombres score% cryptées 253 )

Maintenant, nous avons les numéros suivants:
le sel = 134789 le score = crypted 793233265 la somme de contrôle = 40

Vous faites une demande au serveur, l'envoi 134789793233265040 comme score.

Sur le serveur de partition, vous pouvez diviser 793233265 par 134789 donnant 5885 et valider la somme de contrôle en utilisant la même fonction que précédemment.

Si la somme de contrôle échoue, les numéros ont été falsifiés.

vous pourriez probablement avec quelque chose de beaucoup plus sûr, mais il devrait faire l'affaire.

Autres conseils

Essentiellement, vous ne voulez pas vérifier le score provient d'un client légitime, vous voulez vérifier que le client a effectivement joué le jeu pour obtenir le score. Essentiellement, le mieux que vous pouvez espérer est que les gens sont nécessaires pour créer une IA pour jouer le jeu.

Voici deux choses que vous pouvez essayer:

  • Connectez les entrées dans le jeu et envoyer ceux avec le score. Le serveur peut alors valider que le score correspond à un jeu possible. Vous pouvez également détecter les soumissions en double ainsi.
  • Taux Appliquer limite pour arrêter les clients de soumettre des scores à un rythme manifestement inhumain. Appliquer des limites supérieures sur les scores admissibles sur la base de ce qui est réellement possible d'atteindre et de limites inférieures sur des choses comme les actions par seconde.
  • Utilisez les entrées précédentes de semences partiellement le générateur de nombres pseudo-aléatoires (en supposant une utilisation). Cela rend moins probable que les clients peuvent modifier une soumission obtenir un peu et encore un jeu valide / combo score.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top