Comment nous avons éliminé les joueurs ordinaires et pour les DDoS ou nos serveurs: un guide pratique

Parler de nouveaux projets est bien sûr bien, mais tout ne se passe pas toujours comme nous le souhaitons.

En général, ils ont commencé à se souvenir du fakap du passé, lorsque la solution à un problème en a ajouté de nouveaux, s'est emportée et a décidé de partager un couple. Comment interdire des joueurs innocents, tuer leurs propres serveurs, faire une erreur dans une lettre et capter des tonnes de commentaires négatifs des utilisateurs - c'est tout ce que nous aimons.



Perdu - obtenez une interdiction


Il fut un temps où notre jeu War Robots en raison de défauts d'architecture était attaqué par des tricheurs. Il y avait des utilités qui augmentaient l'offre de santé aux valeurs cosmiques, ce qui les rendait pratiquement immortelles. En conséquence, nous avons clôturé la tâche avec des tricheurs, mais pas immédiatement.

Au début, nous voulions résoudre le problème magnifiquement au niveau technique: bloquer la possibilité de modifier les paramètres du robot sur le client. Nous n'avons pas réussi à le faire (alors, bien sûr, nous avons trouvé un moyen). Et puis la première solution de travail a été un marteau-piqueur qui a calculé les tricheurs selon un schéma simple:

  1. Chaque robot après le match a été testé pour les dommages.
  2. Si les dégâts subis par le robot dépassaient la valeur de sa santé maximale, alors le joueur était reconnu comme un tricheur et son compte était bloqué.

La solution était une béquille, mais efficace. Les problèmes à cause de lui ont commencé un peu plus tard, mais vous devrez d'abord parler un peu d'un autre bug et des caractéristiques du développement du PvP mobile synchrone.

Lorsque les joueurs ont une connexion Internet très coquine (ce qui est normal dans les jeux mobiles), des choses absolument magiques peuvent se produire lors de l'échange de données entre le client et les serveurs. Les demandes des clients sont incomplètes, hors service ou avec un fort retard. En général, un bogue de serveur permettait que si la connexion était mauvaise, le client pouvait envoyer les résultats de la bataille deux ou même trois fois de suite. En conséquence, les joueurs pourraient recevoir 2 à 3 fois plus de récompenses ou dépenser accidentellement deux fois plus de ressources en réparations.

Nous avons résolu ce problème assez rapidement: le profil du serveur a appris à ignorer les résultats de bataille inutiles d'un client. Après des tests réussis, nous avons publié une nouvelle version.

C'est ici que nous a couverts.

Chaque jour, j'ai commencé à interdire tout un groupe de joueurs avec un marteau-piqueur, dont nous avons oublié en toute sécurité, car le problème des robots indestructibles avec une réserve infinie de santé était une chose du passé. Il s'est avéré que dès que le client du joueur a envoyé les résultats d'une bataille en double quantité au serveur, le marteau-piqueur l'a perçu de telle manière que chaque robot mort a été tué deux fois - c'est-à-dire a subi des dégâts deux fois sa santé. Et après chaque bataille, les joueurs ont volé dans l'interdiction par lots.

Tout le monde, bien sûr, était indiscipliné et a même payé une compensation, mais la situation est telle, pas positive à coup sûr.



Comment configurer vous-même les DDoS


Nous avons déjà écrit sur l'évolution de notre infrastructure de serveurs, et maintenant nous nous souvenons d'un cas de cette époque.

Fin 2015, la sortie de la fonctionnalité tant attendue dans War Robots - clans. Lorsque la mise à jour est sortie (et il était tard dans la soirée), nous avons ouvert le champagne et tout irait bien. Mais je n'ai pas eu à me réjouir longtemps - les serveurs se sont soudainement sentis mal. Il s'est avéré que nous avons fait une attaque DDoS de nos propres mains.

Comment? Très simple. Le client sur l'écran des résultats de la bataille, dans le but d'obtenir des informations sur les clans des joueurs, a fait trop de demandes. Et lorsque le serveur a répondu «laissez-moi tranquille, erreur», le client est revenu sur le serveur sans aucun délai.

Cette même nuit, nous avons lavé le drapeau (nous n'avons pas encore eu le temps de fermer le champagne), qui était contrôlé depuis le serveur de profil - il a complètement bloqué le fonctionnement de l'API Hangar Client. Pour les joueurs qui ont déjà rejoint les clans, nous avons laissé ce drapeau allumé, c'est-à-dire que tout a fonctionné pour eux, car leur nombre n'était pas suffisant pour DDoS le serveur.

En conséquence, nous avons commencé à traiter correctement les réponses du serveur dans le jeu, et en cas d'erreur, augmentez le délai d'expiration pour réessayer la demande.

Évaluation "gratuite"


Une autre histoire est celle où une mise en œuvre de mauvaise qualité rencontre le facteur humain. Seulement maintenant, ils n'ont interdit personne, mais au contraire, ils ont remis la note à gauche et à droite. Bref, une nuit, notre surveillance (et nous surveillons tout ) a enregistré une croissance trop rapide des notes des joueurs.

Il s'est ensuite avéré que la mise en œuvre même du scoring permettait en théorie de dupliquer les données. Mais personne n'y aurait prêté attention si l'administrateur en service, à cause d'une faute de frappe dans une lettre, avait accidentellement redémarré un serveur qui n'était pas censé fonctionner. C'est lui qui a commencé à doubler les cotes des joueurs.

J'ai dû libérer de toute urgence un correctif et passer par la base pour supprimer tous les points supplémentaires qui avaient le temps de s'accumuler. Pour éviter que cela ne se produise - sur tous les serveurs, nous avons supprimé l'ancien schéma de calcul des points et exclu la possibilité de lancement erroné de services là où ils ne devraient pas fonctionner. Il était nécessaire de le faire dès le début, bien sûr, mais ce serait trop ennuyeux.

Prix ​​inestimable


Il y avait un autre fakap avec une faute de frappe, mais beaucoup plus grave.

En quelque sorte à l'Halloween, nous avons lancé un nouveau gacha - une loterie. Si quelqu'un ne le sait pas, un gacha est la mécanique pour obtenir un objet de plusieurs différents au hasard. À la loterie, le joueur disposait d'un ensemble limité de prix visibles de différentes valeurs. Pour chaque ouverture, le joueur a reçu 1 prix, ce prix a été retiré de l'ensemble et le prix d'ouverture a augmenté à chaque fois. Ainsi, le joueur pouvait à coup sûr acheter tous les prix de la loterie, et les plus chanceux ont remporté les prix les plus précieux lors des premières ouvertures (et, par conséquent, les ont reçus à très bon marché).

En général, puis avec du sang, nous avons lavé un élément de l'événement, l'avons testé, exposé. On commence, on met à jour les plannings ... Hourra! Ils se sont précipités! .. Et en même temps, des tonnes de négativité dans la communauté nous tombent dessus que nous prétendons tromper nos joueurs.

En moins d'une demi-heure, la loterie a dû être désactivée. Oui, nous avons vraiment trompé les joueurs. Mais ce n'était pas une question de chance ou de prix - c'était dans une lettre.

L'interface de loterie indique le coût de l'ouverture actuelle (celle qui augmente à chaque fois), par exemple, PRIX: 100 pièces d'or. Voici à quoi ressemblait le concept (notez que selon l'idée, chaque carte a également un prix d'ouverture supplémentaire):



Et voici comment cela s'est terminé lorsque, à la suite d'une série d '«améliorations», le PRIX (prix pour la participation à la loterie) s'est soudainement transformé en PRIX (prix) pour le créateur:



Dans le même temps, en raison de la confusion avant la sortie et du mauvais contrôle de chaque carte individuelle, le prix d'ouverture a été perdu, ce qui a confondu tous les joueurs.

Et ils ont appuyé par réflexe sur le bouton jusqu'à ce qu'ils dépensent toute la dureté. Eh bien, quoi, le "prix" augmente à chaque achat. Et il en était ainsi en 18 langues. Dans le même temps, nous avions également des «locales» sur le client, il était donc possible de corriger une seule lettre uniquement via un correctif.

En conséquence, ils ont dévoilé la situation, introduit des points de contrôle supplémentaires, rendu l'or aux joueurs et enregistré les paramètres régionaux sur le serveur afin que rien de tel ne se reproduise.

Il est temps de présenter le hashtag # Kosyakinaprode

Source: https://habr.com/ru/post/fr417441/


All Articles