{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/","llm_html_url":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/llm","llm_json_url":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"Gamasutra: Blog de Trond Fasteraune &#8211; Ne faites jamais confiance au client: techniques simples contre la triche en multijoueur et SpatialOS\n\n &#8211; Un bon serveur Minecraft","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-06-17T04:39:24+00:00","modified_at":"2019-06-17T04:39:24+00:00","word_count":1979,"reading_time_seconds":594,"summary":"Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère. Faire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de [&hellip;]","summary_points":["Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère.","Faire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais.","Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir.","Vous n&#39;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement."],"topics":["Serveur minecraft"],"entities":[],"entities_metadata":[{"id":13,"name":"Serveur minecraft","slug":"serveur-minecraft","taxonomy":"category","count":2786,"url":"https://tutos-gameserver.fr/category/serveur-minecraft/"}],"tags":["Serveur minecraft"],"content_hash":"84152b6a409bcb4dc3535c452ca87b10","plain_text":"Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère.                \n\nFaire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir. Vous n&#39;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement. C&#39;est devenu une chose du passé.\nCela présente également des aspects négatifs. De plus en plus d’entreprises de jeux vidéo indépendants ne savent pas ce qui se passe sous le capot de leur jeu en ligne. En conséquence, certains jeux publiés aujourd&#39;hui sont totalement non optimisés et ouverts à la triche.\nDans cet article, je voudrais aborder les bases d&#39;une chose &#8211; la prévention de la triche. Je veux vous montrer comment des techniques simples peuvent protéger votre jeu contre des attaques simples et comment l&#39;architecture de SpatialOS peut vous aider à les surmonter.\nLa triche\nEn fonction du type de jeu que vous réalisez, il peut être une perte de temps de mettre en œuvre la prévention de la triche. Pourquoi tricher dans un jeu de société en ligne avec vos amis? Ou pourquoi tricher dans un jeu d’histoire coopératif en ligne? Les jeux sur lesquels vous devriez vous concentrer sont des jeux en ligne auxquels vous pouvez jouer avec des personnes aléatoires.\nParce que si on leur en donne la chance, les gens vont tricher. Ils vont aimer, ils vont survoler les murs, ils vont basculer, ils vont wallhack, ils vont faire équipe, ils vont empiler, ils vont booster. Le fait que le vocabulaire utilisé soit si large est en soi une indication de la portée du comportement.\nVoici un exemple de triche de commutation de décalage et comment vous pouvez simplement modifier votre câble Internet pour obtenir un avantage:\n\nDe plus en plus de startups n’ont tout simplement pas les connaissances de base de la technologie réseau dans leurs jeux. Elles ont donc souvent des problèmes à résoudre, même après leur sortie. Une chose que ces jeux infidèles ont en commun est le simple fait que la confiance est donnée au client.\nVous ne devriez jamais, jamais, faire confiance au client. Vous devez supposer que tous les clients utilisent une version modifiée de leur jeu et que tous les paquets réseau envoyés par ces clients sont modifiés et malveillants. Dans cet esprit, nous espérons que les développeurs auront suffisamment peur pour devenir au moins un peu paranoïaques. La paranoïa et une appréciation des théories du complot sont un bon trait pour un programmeur de réseau.\nUne conséquence de l&#39;absence de fonctionnalités clés dans la prévention de la triche pourrait être catastrophique. En faisant les bonnes choses dans le mauvais ordre, un joueur pourrait être capable de faire tomber tout le serveur par terre.\nEn utilisant des outils d&#39;usage général facilement disponibles sur Internet et quelques tutoriels sur youtube, vous êtes en mesure de récolter de nombreux fruits en termes de triche. Voici quelques exemples de simples astuces que n&#39;importe qui peut faire en tant que client si le serveur ne le protège pas ou s&#39;il est programmé de manière incorrecte.\n\nTéléporter à une position.\nCourez très vite.\nPasser à travers les murs.\nModifier ou geler le nombre d&#39;articles que vous avez dans votre inventaire\nModifiez ou gelez votre santé / armure / mana sur vous-même, vous rendant essentiellement invincible.\nVoler dans les airs.\n\nSi vous êtes la mauvaise personne avec les bons outils, vous pourrez peut-être aller encore plus loin. Si le serveur ne protège pas contre ces exploits, vous pourrez peut-être:\n\nDire au serveur que vous avez subi des dégâts dus à une chute sans réellement les subir\nDites au serveur que un autre joueur a pris des dégâts de chute. Cela permet essentiellement à un seul joueur d’effacer en quelques secondes l’ensemble de la population d’un serveur.\nFaire apparaître des objets / projectiles à n’importe quel endroit du jeu.\n\nPrévenir les astuces dans SpatialOS\nMouvement\nVous devez avoir une connaissance de base de la manière dont les composants constituent les entités dans SpatialOS et de la manière dont certains opérateurs peuvent donner un accès en écriture aux composants. (Vous pouvez en savoir plus sur les entités ici.)\nLa version la plus simple d&#39;un lecteur est une entité qui possède un composant de transformation sur lui-même. Le client qui contrôle ce lecteur dispose d&#39;un accès en écriture à ce composant de transformation. Tous les autres travailleurs pour lesquels cette entité est extraite recevront instantanément les modifications apportées à ce composant. Si vous créez un jeu qui ne vous inquiète pas, si les gens trichent, comme dans un jeu de chat social ou une simulation avec des spectateurs, cela pourrait être suffisant. Il est même encouragé de le faire de cette manière afin d’économiser de la bande passante et des ressources. Mais si vous avez besoin que les joueurs soient restreints de manière à éviter de tricher, c&#39;est totalement inacceptable &#8211; un client compromis pourra se téléporter à sa guise dans n&#39;importe quel endroit du monde.\n\nIllustration où nous permettons à un joueur de mettre à jour sa transformation directement. Aucune vérification n&#39;est faite pour éviter la triche.\nUne technique simple pour empêcher les joueurs de se déplacer plus rapidement (ou de se téléporter!) Consiste à transférer la logique de déplacement du joueur à un ouvrier faisant autorité. Au lieu de permettre au client de mettre à jour la transformation directement sur le lecteur, nous créons simplement un nouveau composant d’entrée par lequel le lecteur peut communiquer.\n\nLes mouvements de MOBA, comme DOTA 2 de Valve, sont calculés et effectués sur le serveur.\nVoici un exemple de fichier de schéma constituant un composant PlayerInput. Le client a un accès en écriture à ce composant:\npaquet de jeux;\r\n\r\ncomposant PlayerInput\r\n\r\n    id = 12001;\r\n    float horizontal = 1;\r\n    float vertical = 2;\r\n    bool en cours d&#39;exécution = 3;\r\n\nAvoir la logique de déplacement effectuée sur un ouvrier dont vous avez le contrôle le rend totalement sécurisé. Pour le dire simplement, tout ce que le client envoie au travailleur faisant autorité est la direction dans laquelle le joueur s’installe et ses actions, tout comme le contrôle d’un véhicule télécommandé.\n\nIllustration où nous autorisons uniquement le lecteur à mettre à jour des données sur un composant d’entrée. Le travailleur faisant autorité lit alors ces informations et déplace le lecteur.\nUn problème majeur avec cette approche est la latence. En faisant ce qui est décrit ci-dessus avec une latence quelconque, un joueur verra son personnage bouger légèrement après qu’il lui ait dit de bouger. Dans la mesure où ils attendent que le travailleur faisant autorité déplace le joueur, ils réagiront plus tard. Nous pouvons cependant apporter de simples modifications pour le rendre acceptable.\nVoici un composant PlayerInput modifié permettant la prédiction côté client:\npaquet de jeux;\r\nimportat &quot;improbable / vector3.schema&quot;;\r\n\r\ncomposant PlayerInput\r\n\r\n    id = 18001;\r\n    improbable.Vector3f désirée_position = 1;\r\n    bool en cours d&#39;exécution = 2;\r\n\nAu lieu d’envoyer la direction du mouvement du client au travailleur faisant autorité et d’attendre que le joueur bouge, nous déplaçons immédiatement l’objet joueur sur le client et envoyons la position à laquelle nous sommes actuellement au travailleur faisant autorité. Nous appelons cette position notre «position souhaitée». L&#39;agent faisant autorité vérifie ensuite si nous sommes autorisés à passer de notre dernière position à la nouvelle position souhaitée et met à jour la transformation en conséquence. Deux contrôles simples peuvent être utilisés. Un pour voir si nous avançons trop vite et un autre pour voir si nous avançons dans quelque chose que nous ne sommes pas supposés faire.\nCe n&#39;est cependant pas une solution parfaite. Vous devez encore compenser la latence afin de résoudre le paradoxe du «qui tire en premier». Je recommande de lire ces articles de blog approfondis de Gabriel Gambetta d’Improbable à propos de ce numéro.\n\nDarkfall Unholy Wars était un MMORPG à la première personne avec un combat complet joueur contre joueur et avec une validation partielle des commandes.\nCommande et demandes\nChaque fois que vous voulez faire quelque chose dans un jeu en ligne, vous envoyez une commande au serveur. Cette commande est formée comme une requête. La réponse que vous recevez du serveur est le résultat de cette demande. En d&#39;autres termes, vous pourriez dire qu&#39;il se comporte comme un appel de fonction simple ou un appel de procédure distante (RPC). Un exemple de requête de ce type pourrait consister à demander de construire un bloc dans Minecraft ou de lancer un sort dans Guild Wars 2.\nIl y a un tas de choses qui pourraient mal tourner si des vérifications ne sont pas en place pour valider ces commandes. Comme je l&#39;ai dit plus tôt, nous devrions toujours supposer que le contenu d&#39;une demande est malveillant et que nous devons toujours nous assurer que les valeurs du contenu sont dans les limites autorisées.\nSans vérification adéquate en place, un pirate informatique pourrait, par exemple, lancer des sorts depuis un emplacement très éloigné de son joueur ou attaquer des ennemis très éloignés d&#39;un lieu sûr. Ce fut le cas dans Darkfall Unholy Wars, un MMORPG que les développeurs ont laissé ouvert pour ce type de tricherie. Dans la vidéo suivante, vous pouvez voir un joueur attaquer d&#39;autres joueurs à une grande distance, entre autres.\n\nIl n’existe pas de solution véritable à ces problèmes, mais un conseil utile est de toujours vérifier minutieusement toutes les données envoyées avec une commande. Voici quelques exemples:\n\nVérifiez si la position envoyée avec une commande est à la portée du lecteur.\nChaque fois qu&#39;un index est utilisé, assurez-vous toujours que cet index n&#39;est pas hors limites.\nChaque fois qu&#39;un index ou un type est utilisé, assurez-vous qu&#39;ils sont autorisés à utiliser cet index ou ce type. Ne pas le faire pourrait permettre aux joueurs de créer un élément réservé aux administrateurs dans le jeu s&#39;ils envoient des commandes «Créer cet élément».\nLimitez le nombre de personnes autorisées à utiliser des commandes avec des délais de récupération pour éviter les inondations ou les exploits par écrasement.\n\nConseils de développement\nPendant que vous développez votre jeu en ligne, vous avez l&#39;outil idéal pour vérifier la tricherie: votre propre projet. Essayez de déplacer votre lecteur dans l’éditeur en supprimant des murs, de vous téléporter et de voler dans les airs. Si vous détectez la moindre chose mais croyez que personne ne l&#39;exploitera, vous vous trompez. Les gens vont essayer de briser les règles et les limites de votre jeu, peu importe quoi. Le mieux est d’avoir une longueur d’avance sur eux et d’essayer de casser d’abord vos propres règles.\n\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère.","Faire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir. Vous n&#39;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement. C&#39;est devenu une chose du passé.\nCela présente également des aspects négatifs. De plus en plus d’entreprises de jeux vidéo indépendants ne savent pas ce qui se passe sous le capot de leur jeu en ligne. En conséquence, certains jeux publiés aujourd&#39;hui sont totalement non optimisés et ouverts à la triche.\nDans cet article, je voudrais aborder les bases d&#39;une chose &#8211; la prévention de la triche. Je veux vous montrer comment des techniques simples peuvent protéger votre jeu contre des attaques simples et comment l&#39;architecture de SpatialOS peut vous aider à les surmonter.\nLa triche\nEn fonction du type de jeu que vous réalisez, il peut être une perte de temps de mettre en œuvre la prévention de la triche. Pourquoi tricher dans un jeu de société en ligne avec vos amis? Ou pourquoi tricher dans un jeu d’histoire coopératif en ligne? Les jeux sur lesquels vous devriez vous concentrer sont des jeux en ligne auxquels vous pouvez jouer avec des personnes aléatoires.\nParce que si on leur en donne la chance, les gens vont tricher. Ils vont aimer, ils vont survoler les murs, ils vont basculer, ils vont wallhack, ils vont faire équipe, ils vont empiler, ils vont booster. Le fait que le vocabulaire utilisé soit si large est en soi une indication de la portée du comportement.\nVoici un exemple de triche de commutation de décalage et comment vous pouvez simplement modifier votre câble Internet pour obtenir un avantage:","De plus en plus de startups n’ont tout simplement pas les connaissances de base de la technologie réseau dans leurs jeux. Elles ont donc souvent des problèmes à résoudre, même après leur sortie. Une chose que ces jeux infidèles ont en commun est le simple fait que la confiance est donnée au client.\nVous ne devriez jamais, jamais, faire confiance au client. Vous devez supposer que tous les clients utilisent une version modifiée de leur jeu et que tous les paquets réseau envoyés par ces clients sont modifiés et malveillants. Dans cet esprit, nous espérons que les développeurs auront suffisamment peur pour devenir au moins un peu paranoïaques. La paranoïa et une appréciation des théories du complot sont un bon trait pour un programmeur de réseau.\nUne conséquence de l&#39;absence de fonctionnalités clés dans la prévention de la triche pourrait être catastrophique. En faisant les bonnes choses dans le mauvais ordre, un joueur pourrait être capable de faire tomber tout le serveur par terre.\nEn utilisant des outils d&#39;usage général facilement disponibles sur Internet et quelques tutoriels sur youtube, vous êtes en mesure de récolter de nombreux fruits en termes de triche. Voici quelques exemples de simples astuces que n&#39;importe qui peut faire en tant que client si le serveur ne le protège pas ou s&#39;il est programmé de manière incorrecte.","Téléporter à une position.\nCourez très vite.\nPasser à travers les murs.\nModifier ou geler le nombre d&#39;articles que vous avez dans votre inventaire\nModifiez ou gelez votre santé / armure / mana sur vous-même, vous rendant essentiellement invincible.\nVoler dans les airs.","Si vous êtes la mauvaise personne avec les bons outils, vous pourrez peut-être aller encore plus loin. Si le serveur ne protège pas contre ces exploits, vous pourrez peut-être:","Dire au serveur que vous avez subi des dégâts dus à une chute sans réellement les subir\nDites au serveur que un autre joueur a pris des dégâts de chute. Cela permet essentiellement à un seul joueur d’effacer en quelques secondes l’ensemble de la population d’un serveur.\nFaire apparaître des objets / projectiles à n’importe quel endroit du jeu.","Prévenir les astuces dans SpatialOS\nMouvement\nVous devez avoir une connaissance de base de la manière dont les composants constituent les entités dans SpatialOS et de la manière dont certains opérateurs peuvent donner un accès en écriture aux composants. (Vous pouvez en savoir plus sur les entités ici.)\nLa version la plus simple d&#39;un lecteur est une entité qui possède un composant de transformation sur lui-même. Le client qui contrôle ce lecteur dispose d&#39;un accès en écriture à ce composant de transformation. Tous les autres travailleurs pour lesquels cette entité est extraite recevront instantanément les modifications apportées à ce composant. Si vous créez un jeu qui ne vous inquiète pas, si les gens trichent, comme dans un jeu de chat social ou une simulation avec des spectateurs, cela pourrait être suffisant. Il est même encouragé de le faire de cette manière afin d’économiser de la bande passante et des ressources. Mais si vous avez besoin que les joueurs soient restreints de manière à éviter de tricher, c&#39;est totalement inacceptable &#8211; un client compromis pourra se téléporter à sa guise dans n&#39;importe quel endroit du monde.","Illustration où nous permettons à un joueur de mettre à jour sa transformation directement. Aucune vérification n&#39;est faite pour éviter la triche.\nUne technique simple pour empêcher les joueurs de se déplacer plus rapidement (ou de se téléporter!) Consiste à transférer la logique de déplacement du joueur à un ouvrier faisant autorité. Au lieu de permettre au client de mettre à jour la transformation directement sur le lecteur, nous créons simplement un nouveau composant d’entrée par lequel le lecteur peut communiquer.","Les mouvements de MOBA, comme DOTA 2 de Valve, sont calculés et effectués sur le serveur.\nVoici un exemple de fichier de schéma constituant un composant PlayerInput. Le client a un accès en écriture à ce composant:\npaquet de jeux;","composant PlayerInput","    id = 12001;\n    float horizontal = 1;\n    float vertical = 2;\n    bool en cours d&#39;exécution = 3;","Avoir la logique de déplacement effectuée sur un ouvrier dont vous avez le contrôle le rend totalement sécurisé. Pour le dire simplement, tout ce que le client envoie au travailleur faisant autorité est la direction dans laquelle le joueur s’installe et ses actions, tout comme le contrôle d’un véhicule télécommandé.","Illustration où nous autorisons uniquement le lecteur à mettre à jour des données sur un composant d’entrée. Le travailleur faisant autorité lit alors ces informations et déplace le lecteur.\nUn problème majeur avec cette approche est la latence. En faisant ce qui est décrit ci-dessus avec une latence quelconque, un joueur verra son personnage bouger légèrement après qu’il lui ait dit de bouger. Dans la mesure où ils attendent que le travailleur faisant autorité déplace le joueur, ils réagiront plus tard. Nous pouvons cependant apporter de simples modifications pour le rendre acceptable.\nVoici un composant PlayerInput modifié permettant la prédiction côté client:\npaquet de jeux;\nimportat &quot;improbable / vector3.schema&quot;;","composant PlayerInput","    id = 18001;\n    improbable.Vector3f désirée_position = 1;\n    bool en cours d&#39;exécution = 2;","Au lieu d’envoyer la direction du mouvement du client au travailleur faisant autorité et d’attendre que le joueur bouge, nous déplaçons immédiatement l’objet joueur sur le client et envoyons la position à laquelle nous sommes actuellement au travailleur faisant autorité. Nous appelons cette position notre «position souhaitée». L&#39;agent faisant autorité vérifie ensuite si nous sommes autorisés à passer de notre dernière position à la nouvelle position souhaitée et met à jour la transformation en conséquence. Deux contrôles simples peuvent être utilisés. Un pour voir si nous avançons trop vite et un autre pour voir si nous avançons dans quelque chose que nous ne sommes pas supposés faire.\nCe n&#39;est cependant pas une solution parfaite. Vous devez encore compenser la latence afin de résoudre le paradoxe du «qui tire en premier». Je recommande de lire ces articles de blog approfondis de Gabriel Gambetta d’Improbable à propos de ce numéro.","Darkfall Unholy Wars était un MMORPG à la première personne avec un combat complet joueur contre joueur et avec une validation partielle des commandes.\nCommande et demandes\nChaque fois que vous voulez faire quelque chose dans un jeu en ligne, vous envoyez une commande au serveur. Cette commande est formée comme une requête. La réponse que vous recevez du serveur est le résultat de cette demande. En d&#39;autres termes, vous pourriez dire qu&#39;il se comporte comme un appel de fonction simple ou un appel de procédure distante (RPC). Un exemple de requête de ce type pourrait consister à demander de construire un bloc dans Minecraft ou de lancer un sort dans Guild Wars 2.\nIl y a un tas de choses qui pourraient mal tourner si des vérifications ne sont pas en place pour valider ces commandes. Comme je l&#39;ai dit plus tôt, nous devrions toujours supposer que le contenu d&#39;une demande est malveillant et que nous devons toujours nous assurer que les valeurs du contenu sont dans les limites autorisées.\nSans vérification adéquate en place, un pirate informatique pourrait, par exemple, lancer des sorts depuis un emplacement très éloigné de son joueur ou attaquer des ennemis très éloignés d&#39;un lieu sûr. Ce fut le cas dans Darkfall Unholy Wars, un MMORPG que les développeurs ont laissé ouvert pour ce type de tricherie. Dans la vidéo suivante, vous pouvez voir un joueur attaquer d&#39;autres joueurs à une grande distance, entre autres.","Il n’existe pas de solution véritable à ces problèmes, mais un conseil utile est de toujours vérifier minutieusement toutes les données envoyées avec une commande. Voici quelques exemples:","Vérifiez si la position envoyée avec une commande est à la portée du lecteur.\nChaque fois qu&#39;un index est utilisé, assurez-vous toujours que cet index n&#39;est pas hors limites.\nChaque fois qu&#39;un index ou un type est utilisé, assurez-vous qu&#39;ils sont autorisés à utiliser cet index ou ce type. Ne pas le faire pourrait permettre aux joueurs de créer un élément réservé aux administrateurs dans le jeu s&#39;ils envoient des commandes «Créer cet élément».\nLimitez le nombre de personnes autorisées à utiliser des commandes avec des délais de récupération pour éviter les inondations ou les exploits par écrasement.","Conseils de développement\nPendant que vous développez votre jeu en ligne, vous avez l&#39;outil idéal pour vérifier la tricherie: votre propre projet. Essayez de déplacer votre lecteur dans l’éditeur en supprimant des murs, de vous téléporter et de voler dans les airs. Si vous détectez la moindre chose mais croyez que personne ne l&#39;exploitera, vous vous trompez. Les gens vont essayer de briser les règles et les limites de votre jeu, peu importe quoi. Le mieux est d’avoir une longueur d’avance sur eux et d’essayer de casser d’abord vos propres règles.","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère.","html":"<p>Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#039;écrivain et non de Gamasutra ou de sa société mère.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"Faire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir. Vous n&#39;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement. C&#39;est devenu une chose du passé.\nCela présente également des aspects négatifs. De plus en plus d’entreprises de jeux vidéo indépendants ne savent pas ce qui se passe sous le capot de leur jeu en ligne. En conséquence, certains jeux publiés aujourd&#39;hui sont totalement non optimisés et ouverts à la triche.\nDans cet article, je voudrais aborder les bases d&#39;une chose &#8211; la prévention de la triche. Je veux vous montrer comment des techniques simples peuvent protéger votre jeu contre des attaques simples et comment l&#39;architecture de SpatialOS peut vous aider à les surmonter.\nLa triche\nEn fonction du type de jeu que vous réalisez, il peut être une perte de temps de mettre en œuvre la prévention de la triche. Pourquoi tricher dans un jeu de société en ligne avec vos amis? Ou pourquoi tricher dans un jeu d’histoire coopératif en ligne? Les jeux sur lesquels vous devriez vous concentrer sont des jeux en ligne auxquels vous pouvez jouer avec des personnes aléatoires.\nParce que si on leur en donne la chance, les gens vont tricher. Ils vont aimer, ils vont survoler les murs, ils vont basculer, ils vont wallhack, ils vont faire équipe, ils vont empiler, ils vont booster. Le fait que le vocabulaire utilisé soit si large est en soi une indication de la portée du comportement.\nVoici un exemple de triche de commutation de décalage et comment vous pouvez simplement modifier votre câble Internet pour obtenir un avantage:","html":"<p>Faire des jeux multijoueurs en ligne est aujourd&#039;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir. Vous n&#039;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement. C&#039;est devenu une chose du passé.\nCela présente également des aspects négatifs. De plus en plus d’entreprises de jeux vidéo indépendants ne savent pas ce qui se passe sous le capot de leur jeu en ligne. En conséquence, certains jeux publiés aujourd&#039;hui sont totalement non optimisés et ouverts à la triche.\nDans cet article, je voudrais aborder les bases d&#039;une chose &#8211; la prévention de la triche. Je veux vous montrer comment des techniques simples peuvent protéger votre jeu contre des attaques simples et comment l&#039;architecture de SpatialOS peut vous aider à les surmonter.\nLa triche\nEn fonction du type de jeu que vous réalisez, il peut être une perte de temps de mettre en œuvre la prévention de la triche. Pourquoi tricher dans un jeu de société en ligne avec vos amis? Ou pourquoi tricher dans un jeu d’histoire coopératif en ligne? Les jeux sur lesquels vous devriez vous concentrer sont des jeux en ligne auxquels vous pouvez jouer avec des personnes aléatoires.\nParce que si on leur en donne la chance, les gens vont tricher. Ils vont aimer, ils vont survoler les murs, ils vont basculer, ils vont wallhack, ils vont faire équipe, ils vont empiler, ils vont booster. Le fait que le vocabulaire utilisé soit si large est en soi une indication de la portée du comportement.\nVoici un exemple de triche de commutation de décalage et comment vous pouvez simplement modifier votre câble Internet pour obtenir un avantage:</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"De plus en plus de startups n’ont tout simplement pas les connaissances de base de la technologie réseau dans leurs jeux. Elles ont donc souvent des problèmes à résoudre, même après leur sortie. Une chose que ces jeux infidèles ont en commun est le simple fait que la confiance est donnée au client.\nVous ne devriez jamais, jamais, faire confiance au client. Vous devez supposer que tous les clients utilisent une version modifiée de leur jeu et que tous les paquets réseau envoyés par ces clients sont modifiés et malveillants. Dans cet esprit, nous espérons que les développeurs auront suffisamment peur pour devenir au moins un peu paranoïaques. La paranoïa et une appréciation des théories du complot sont un bon trait pour un programmeur de réseau.\nUne conséquence de l&#39;absence de fonctionnalités clés dans la prévention de la triche pourrait être catastrophique. En faisant les bonnes choses dans le mauvais ordre, un joueur pourrait être capable de faire tomber tout le serveur par terre.\nEn utilisant des outils d&#39;usage général facilement disponibles sur Internet et quelques tutoriels sur youtube, vous êtes en mesure de récolter de nombreux fruits en termes de triche. Voici quelques exemples de simples astuces que n&#39;importe qui peut faire en tant que client si le serveur ne le protège pas ou s&#39;il est programmé de manière incorrecte.","html":"<p>De plus en plus de startups n’ont tout simplement pas les connaissances de base de la technologie réseau dans leurs jeux. Elles ont donc souvent des problèmes à résoudre, même après leur sortie. Une chose que ces jeux infidèles ont en commun est le simple fait que la confiance est donnée au client.\nVous ne devriez jamais, jamais, faire confiance au client. Vous devez supposer que tous les clients utilisent une version modifiée de leur jeu et que tous les paquets réseau envoyés par ces clients sont modifiés et malveillants. Dans cet esprit, nous espérons que les développeurs auront suffisamment peur pour devenir au moins un peu paranoïaques. La paranoïa et une appréciation des théories du complot sont un bon trait pour un programmeur de réseau.\nUne conséquence de l&#039;absence de fonctionnalités clés dans la prévention de la triche pourrait être catastrophique. En faisant les bonnes choses dans le mauvais ordre, un joueur pourrait être capable de faire tomber tout le serveur par terre.\nEn utilisant des outils d&#039;usage général facilement disponibles sur Internet et quelques tutoriels sur youtube, vous êtes en mesure de récolter de nombreux fruits en termes de triche. Voici quelques exemples de simples astuces que n&#039;importe qui peut faire en tant que client si le serveur ne le protège pas ou s&#039;il est programmé de manière incorrecte.</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"Téléporter à une position.\nCourez très vite.\nPasser à travers les murs.\nModifier ou geler le nombre d&#39;articles que vous avez dans votre inventaire\nModifiez ou gelez votre santé / armure / mana sur vous-même, vous rendant essentiellement invincible.\nVoler dans les airs.","html":"<p>Téléporter à une position.\nCourez très vite.\nPasser à travers les murs.\nModifier ou geler le nombre d&#039;articles que vous avez dans votre inventaire\nModifiez ou gelez votre santé / armure / mana sur vous-même, vous rendant essentiellement invincible.\nVoler dans les airs.</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"Si vous êtes la mauvaise personne avec les bons outils, vous pourrez peut-être aller encore plus loin. Si le serveur ne protège pas contre ces exploits, vous pourrez peut-être:","html":"<p>Si vous êtes la mauvaise personne avec les bons outils, vous pourrez peut-être aller encore plus loin. Si le serveur ne protège pas contre ces exploits, vous pourrez peut-être:</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"Dire au serveur que vous avez subi des dégâts dus à une chute sans réellement les subir\nDites au serveur que un autre joueur a pris des dégâts de chute. Cela permet essentiellement à un seul joueur d’effacer en quelques secondes l’ensemble de la population d’un serveur.\nFaire apparaître des objets / projectiles à n’importe quel endroit du jeu.","html":"<p>Dire au serveur que vous avez subi des dégâts dus à une chute sans réellement les subir\nDites au serveur que un autre joueur a pris des dégâts de chute. Cela permet essentiellement à un seul joueur d’effacer en quelques secondes l’ensemble de la population d’un serveur.\nFaire apparaître des objets / projectiles à n’importe quel endroit du jeu.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"Prévenir les astuces dans SpatialOS\nMouvement\nVous devez avoir une connaissance de base de la manière dont les composants constituent les entités dans SpatialOS et de la manière dont certains opérateurs peuvent donner un accès en écriture aux composants. (Vous pouvez en savoir plus sur les entités ici.)\nLa version la plus simple d&#39;un lecteur est une entité qui possède un composant de transformation sur lui-même. Le client qui contrôle ce lecteur dispose d&#39;un accès en écriture à ce composant de transformation. Tous les autres travailleurs pour lesquels cette entité est extraite recevront instantanément les modifications apportées à ce composant. Si vous créez un jeu qui ne vous inquiète pas, si les gens trichent, comme dans un jeu de chat social ou une simulation avec des spectateurs, cela pourrait être suffisant. Il est même encouragé de le faire de cette manière afin d’économiser de la bande passante et des ressources. Mais si vous avez besoin que les joueurs soient restreints de manière à éviter de tricher, c&#39;est totalement inacceptable &#8211; un client compromis pourra se téléporter à sa guise dans n&#39;importe quel endroit du monde.","html":"<p>Prévenir les astuces dans SpatialOS\nMouvement\nVous devez avoir une connaissance de base de la manière dont les composants constituent les entités dans SpatialOS et de la manière dont certains opérateurs peuvent donner un accès en écriture aux composants. (Vous pouvez en savoir plus sur les entités ici.)\nLa version la plus simple d&#039;un lecteur est une entité qui possède un composant de transformation sur lui-même. Le client qui contrôle ce lecteur dispose d&#039;un accès en écriture à ce composant de transformation. Tous les autres travailleurs pour lesquels cette entité est extraite recevront instantanément les modifications apportées à ce composant. Si vous créez un jeu qui ne vous inquiète pas, si les gens trichent, comme dans un jeu de chat social ou une simulation avec des spectateurs, cela pourrait être suffisant. Il est même encouragé de le faire de cette manière afin d’économiser de la bande passante et des ressources. Mais si vous avez besoin que les joueurs soient restreints de manière à éviter de tricher, c&#039;est totalement inacceptable &#8211; un client compromis pourra se téléporter à sa guise dans n&#039;importe quel endroit du monde.</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"Illustration où nous permettons à un joueur de mettre à jour sa transformation directement. Aucune vérification n&#39;est faite pour éviter la triche.\nUne technique simple pour empêcher les joueurs de se déplacer plus rapidement (ou de se téléporter!) Consiste à transférer la logique de déplacement du joueur à un ouvrier faisant autorité. Au lieu de permettre au client de mettre à jour la transformation directement sur le lecteur, nous créons simplement un nouveau composant d’entrée par lequel le lecteur peut communiquer.","html":"<p>Illustration où nous permettons à un joueur de mettre à jour sa transformation directement. Aucune vérification n&#039;est faite pour éviter la triche.\nUne technique simple pour empêcher les joueurs de se déplacer plus rapidement (ou de se téléporter!) Consiste à transférer la logique de déplacement du joueur à un ouvrier faisant autorité. Au lieu de permettre au client de mettre à jour la transformation directement sur le lecteur, nous créons simplement un nouveau composant d’entrée par lequel le lecteur peut communiquer.</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"Les mouvements de MOBA, comme DOTA 2 de Valve, sont calculés et effectués sur le serveur.\nVoici un exemple de fichier de schéma constituant un composant PlayerInput. Le client a un accès en écriture à ce composant:\npaquet de jeux;","html":"<p>Les mouvements de MOBA, comme DOTA 2 de Valve, sont calculés et effectués sur le serveur.\nVoici un exemple de fichier de schéma constituant un composant PlayerInput. Le client a un accès en écriture à ce composant:\npaquet de jeux;</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"composant PlayerInput","html":"<p>composant PlayerInput</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"    id = 12001;\n    float horizontal = 1;\n    float vertical = 2;\n    bool en cours d&#39;exécution = 3;","html":"<p>    id = 12001;\n    float horizontal = 1;\n    float vertical = 2;\n    bool en cours d&#039;exécution = 3;</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"Avoir la logique de déplacement effectuée sur un ouvrier dont vous avez le contrôle le rend totalement sécurisé. Pour le dire simplement, tout ce que le client envoie au travailleur faisant autorité est la direction dans laquelle le joueur s’installe et ses actions, tout comme le contrôle d’un véhicule télécommandé.","html":"<p>Avoir la logique de déplacement effectuée sur un ouvrier dont vous avez le contrôle le rend totalement sécurisé. Pour le dire simplement, tout ce que le client envoie au travailleur faisant autorité est la direction dans laquelle le joueur s’installe et ses actions, tout comme le contrôle d’un véhicule télécommandé.</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"Illustration où nous autorisons uniquement le lecteur à mettre à jour des données sur un composant d’entrée. Le travailleur faisant autorité lit alors ces informations et déplace le lecteur.\nUn problème majeur avec cette approche est la latence. En faisant ce qui est décrit ci-dessus avec une latence quelconque, un joueur verra son personnage bouger légèrement après qu’il lui ait dit de bouger. Dans la mesure où ils attendent que le travailleur faisant autorité déplace le joueur, ils réagiront plus tard. Nous pouvons cependant apporter de simples modifications pour le rendre acceptable.\nVoici un composant PlayerInput modifié permettant la prédiction côté client:\npaquet de jeux;\nimportat &quot;improbable / vector3.schema&quot;;","html":"<p>Illustration où nous autorisons uniquement le lecteur à mettre à jour des données sur un composant d’entrée. Le travailleur faisant autorité lit alors ces informations et déplace le lecteur.\nUn problème majeur avec cette approche est la latence. En faisant ce qui est décrit ci-dessus avec une latence quelconque, un joueur verra son personnage bouger légèrement après qu’il lui ait dit de bouger. Dans la mesure où ils attendent que le travailleur faisant autorité déplace le joueur, ils réagiront plus tard. Nous pouvons cependant apporter de simples modifications pour le rendre acceptable.\nVoici un composant PlayerInput modifié permettant la prédiction côté client:\npaquet de jeux;\nimportat &quot;improbable / vector3.schema&quot;;</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"composant PlayerInput","html":"<p>composant PlayerInput</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"    id = 18001;\n    improbable.Vector3f désirée_position = 1;\n    bool en cours d&#39;exécution = 2;","html":"<p>    id = 18001;\n    improbable.Vector3f désirée_position = 1;\n    bool en cours d&#039;exécution = 2;</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"Au lieu d’envoyer la direction du mouvement du client au travailleur faisant autorité et d’attendre que le joueur bouge, nous déplaçons immédiatement l’objet joueur sur le client et envoyons la position à laquelle nous sommes actuellement au travailleur faisant autorité. Nous appelons cette position notre «position souhaitée». L&#39;agent faisant autorité vérifie ensuite si nous sommes autorisés à passer de notre dernière position à la nouvelle position souhaitée et met à jour la transformation en conséquence. Deux contrôles simples peuvent être utilisés. Un pour voir si nous avançons trop vite et un autre pour voir si nous avançons dans quelque chose que nous ne sommes pas supposés faire.\nCe n&#39;est cependant pas une solution parfaite. Vous devez encore compenser la latence afin de résoudre le paradoxe du «qui tire en premier». Je recommande de lire ces articles de blog approfondis de Gabriel Gambetta d’Improbable à propos de ce numéro.","html":"<p>Au lieu d’envoyer la direction du mouvement du client au travailleur faisant autorité et d’attendre que le joueur bouge, nous déplaçons immédiatement l’objet joueur sur le client et envoyons la position à laquelle nous sommes actuellement au travailleur faisant autorité. Nous appelons cette position notre «position souhaitée». L&#039;agent faisant autorité vérifie ensuite si nous sommes autorisés à passer de notre dernière position à la nouvelle position souhaitée et met à jour la transformation en conséquence. Deux contrôles simples peuvent être utilisés. Un pour voir si nous avançons trop vite et un autre pour voir si nous avançons dans quelque chose que nous ne sommes pas supposés faire.\nCe n&#039;est cependant pas une solution parfaite. Vous devez encore compenser la latence afin de résoudre le paradoxe du «qui tire en premier». Je recommande de lire ces articles de blog approfondis de Gabriel Gambetta d’Improbable à propos de ce numéro.</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"Darkfall Unholy Wars était un MMORPG à la première personne avec un combat complet joueur contre joueur et avec une validation partielle des commandes.\nCommande et demandes\nChaque fois que vous voulez faire quelque chose dans un jeu en ligne, vous envoyez une commande au serveur. Cette commande est formée comme une requête. La réponse que vous recevez du serveur est le résultat de cette demande. En d&#39;autres termes, vous pourriez dire qu&#39;il se comporte comme un appel de fonction simple ou un appel de procédure distante (RPC). Un exemple de requête de ce type pourrait consister à demander de construire un bloc dans Minecraft ou de lancer un sort dans Guild Wars 2.\nIl y a un tas de choses qui pourraient mal tourner si des vérifications ne sont pas en place pour valider ces commandes. Comme je l&#39;ai dit plus tôt, nous devrions toujours supposer que le contenu d&#39;une demande est malveillant et que nous devons toujours nous assurer que les valeurs du contenu sont dans les limites autorisées.\nSans vérification adéquate en place, un pirate informatique pourrait, par exemple, lancer des sorts depuis un emplacement très éloigné de son joueur ou attaquer des ennemis très éloignés d&#39;un lieu sûr. Ce fut le cas dans Darkfall Unholy Wars, un MMORPG que les développeurs ont laissé ouvert pour ce type de tricherie. Dans la vidéo suivante, vous pouvez voir un joueur attaquer d&#39;autres joueurs à une grande distance, entre autres.","html":"<p>Darkfall Unholy Wars était un MMORPG à la première personne avec un combat complet joueur contre joueur et avec une validation partielle des commandes.\nCommande et demandes\nChaque fois que vous voulez faire quelque chose dans un jeu en ligne, vous envoyez une commande au serveur. Cette commande est formée comme une requête. La réponse que vous recevez du serveur est le résultat de cette demande. En d&#039;autres termes, vous pourriez dire qu&#039;il se comporte comme un appel de fonction simple ou un appel de procédure distante (RPC). Un exemple de requête de ce type pourrait consister à demander de construire un bloc dans Minecraft ou de lancer un sort dans Guild Wars 2.\nIl y a un tas de choses qui pourraient mal tourner si des vérifications ne sont pas en place pour valider ces commandes. Comme je l&#039;ai dit plus tôt, nous devrions toujours supposer que le contenu d&#039;une demande est malveillant et que nous devons toujours nous assurer que les valeurs du contenu sont dans les limites autorisées.\nSans vérification adéquate en place, un pirate informatique pourrait, par exemple, lancer des sorts depuis un emplacement très éloigné de son joueur ou attaquer des ennemis très éloignés d&#039;un lieu sûr. Ce fut le cas dans Darkfall Unholy Wars, un MMORPG que les développeurs ont laissé ouvert pour ce type de tricherie. Dans la vidéo suivante, vous pouvez voir un joueur attaquer d&#039;autres joueurs à une grande distance, entre autres.</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"Il n’existe pas de solution véritable à ces problèmes, mais un conseil utile est de toujours vérifier minutieusement toutes les données envoyées avec une commande. Voici quelques exemples:","html":"<p>Il n’existe pas de solution véritable à ces problèmes, mais un conseil utile est de toujours vérifier minutieusement toutes les données envoyées avec une commande. Voici quelques exemples:</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"Vérifiez si la position envoyée avec une commande est à la portée du lecteur.\nChaque fois qu&#39;un index est utilisé, assurez-vous toujours que cet index n&#39;est pas hors limites.\nChaque fois qu&#39;un index ou un type est utilisé, assurez-vous qu&#39;ils sont autorisés à utiliser cet index ou ce type. Ne pas le faire pourrait permettre aux joueurs de créer un élément réservé aux administrateurs dans le jeu s&#39;ils envoient des commandes «Créer cet élément».\nLimitez le nombre de personnes autorisées à utiliser des commandes avec des délais de récupération pour éviter les inondations ou les exploits par écrasement.","html":"<p>Vérifiez si la position envoyée avec une commande est à la portée du lecteur.\nChaque fois qu&#039;un index est utilisé, assurez-vous toujours que cet index n&#039;est pas hors limites.\nChaque fois qu&#039;un index ou un type est utilisé, assurez-vous qu&#039;ils sont autorisés à utiliser cet index ou ce type. Ne pas le faire pourrait permettre aux joueurs de créer un élément réservé aux administrateurs dans le jeu s&#039;ils envoient des commandes «Créer cet élément».\nLimitez le nombre de personnes autorisées à utiliser des commandes avec des délais de récupération pour éviter les inondations ou les exploits par écrasement.</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"Conseils de développement\nPendant que vous développez votre jeu en ligne, vous avez l&#39;outil idéal pour vérifier la tricherie: votre propre projet. Essayez de déplacer votre lecteur dans l’éditeur en supprimant des murs, de vous téléporter et de voler dans les airs. Si vous détectez la moindre chose mais croyez que personne ne l&#39;exploitera, vous vous trompez. Les gens vont essayer de briser les règles et les limites de votre jeu, peu importe quoi. Le mieux est d’avoir une longueur d’avance sur eux et d’essayer de casser d’abord vos propres règles.","html":"<p>Conseils de développement\nPendant que vous développez votre jeu en ligne, vous avez l&#039;outil idéal pour vérifier la tricherie: votre propre projet. Essayez de déplacer votre lecteur dans l’éditeur en supprimant des murs, de vous téléporter et de voler dans les airs. Si vous détectez la moindre chose mais croyez que personne ne l&#039;exploitera, vous vous trompez. Les gens vont essayer de briser les règles et les limites de votre jeu, peu importe quoi. Le mieux est d’avoir une longueur d’avance sur eux et d’essayer de casser d’abord vos propres règles.</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"Le blog suivant, sauf indication contraire, a été écrit par un membre de la communauté de Gamasutra.Les pensées et opinions exprimées sont celles de l&#39;écrivain et non de Gamasutra ou de sa société mère."},{"id":"text-2","heading":"Text","content":"Faire des jeux multijoueurs en ligne est aujourd&#39;hui plus facile que jamais. Vous téléchargez simplement un package sur le magasin de ressources Unity et vous êtes prêt à partir. Vous n&#39;avez même pas besoin de connaître la programmation pour pouvoir faire fonctionner quelque chose rapidement. C&#39;est devenu une chose du passé.\nCela présente également des aspects négatifs. De plus en plus d’entreprises de jeux vidéo indépendants ne savent pas ce qui se passe sous le capot de leur jeu en ligne. En conséquence, certains jeux publiés aujourd&#39;hui sont totalement non optimisés et ouverts à la triche.\nDans cet article, je voudrais aborder les bases d&#39;une chose &#8211; la prévention de la triche. Je veux vous montrer comment des techniques simples peuvent protéger votre jeu contre des attaques simples et comment l&#39;architecture de SpatialOS peut vous aider à les surmonter.\nLa triche\nEn fonction du type de jeu que vous réalisez, il peut être une perte de temps de mettre en œuvre la prévention de la triche. Pourquoi tricher dans un jeu de société en ligne avec vos amis? Ou pourquoi tricher dans un jeu d’histoire coopératif en ligne? Les jeux sur lesquels vous devriez vous concentrer sont des jeux en ligne auxquels vous pouvez jouer avec des personnes aléatoires.\nParce que si on leur en donne la chance, les gens vont tricher. Ils vont aimer, ils vont survoler les murs, ils vont basculer, ils vont wallhack, ils vont faire équipe, ils vont empiler, ils vont booster. Le fait que le vocabulaire utilisé soit si large est en soi une indication de la portée du comportement.\nVoici un exemple de triche de commutation de décalage et comment vous pouvez simplement modifier votre câble Internet pour obtenir un avantage:"},{"id":"text-3","heading":"Text","content":"De plus en plus de startups n’ont tout simplement pas les connaissances de base de la technologie réseau dans leurs jeux. Elles ont donc souvent des problèmes à résoudre, même après leur sortie. Une chose que ces jeux infidèles ont en commun est le simple fait que la confiance est donnée au client.\nVous ne devriez jamais, jamais, faire confiance au client. Vous devez supposer que tous les clients utilisent une version modifiée de leur jeu et que tous les paquets réseau envoyés par ces clients sont modifiés et malveillants. Dans cet esprit, nous espérons que les développeurs auront suffisamment peur pour devenir au moins un peu paranoïaques. La paranoïa et une appréciation des théories du complot sont un bon trait pour un programmeur de réseau.\nUne conséquence de l&#39;absence de fonctionnalités clés dans la prévention de la triche pourrait être catastrophique. En faisant les bonnes choses dans le mauvais ordre, un joueur pourrait être capable de faire tomber tout le serveur par terre.\nEn utilisant des outils d&#39;usage général facilement disponibles sur Internet et quelques tutoriels sur youtube, vous êtes en mesure de récolter de nombreux fruits en termes de triche. Voici quelques exemples de simples astuces que n&#39;importe qui peut faire en tant que client si le serveur ne le protège pas ou s&#39;il est programmé de manière incorrecte."},{"id":"text-4","heading":"Text","content":"Téléporter à une position.\nCourez très vite.\nPasser à travers les murs.\nModifier ou geler le nombre d&#39;articles que vous avez dans votre inventaire\nModifiez ou gelez votre santé / armure / mana sur vous-même, vous rendant essentiellement invincible.\nVoler dans les airs."},{"id":"text-5","heading":"Text","content":"Si vous êtes la mauvaise personne avec les bons outils, vous pourrez peut-être aller encore plus loin. Si le serveur ne protège pas contre ces exploits, vous pourrez peut-être:"},{"id":"text-6","heading":"Text","content":"Dire au serveur que vous avez subi des dégâts dus à une chute sans réellement les subir\nDites au serveur que un autre joueur a pris des dégâts de chute. Cela permet essentiellement à un seul joueur d’effacer en quelques secondes l’ensemble de la population d’un serveur.\nFaire apparaître des objets / projectiles à n’importe quel endroit du jeu."},{"id":"text-7","heading":"Text","content":"Prévenir les astuces dans SpatialOS\nMouvement\nVous devez avoir une connaissance de base de la manière dont les composants constituent les entités dans SpatialOS et de la manière dont certains opérateurs peuvent donner un accès en écriture aux composants. (Vous pouvez en savoir plus sur les entités ici.)\nLa version la plus simple d&#39;un lecteur est une entité qui possède un composant de transformation sur lui-même. Le client qui contrôle ce lecteur dispose d&#39;un accès en écriture à ce composant de transformation. Tous les autres travailleurs pour lesquels cette entité est extraite recevront instantanément les modifications apportées à ce composant. Si vous créez un jeu qui ne vous inquiète pas, si les gens trichent, comme dans un jeu de chat social ou une simulation avec des spectateurs, cela pourrait être suffisant. Il est même encouragé de le faire de cette manière afin d’économiser de la bande passante et des ressources. Mais si vous avez besoin que les joueurs soient restreints de manière à éviter de tricher, c&#39;est totalement inacceptable &#8211; un client compromis pourra se téléporter à sa guise dans n&#39;importe quel endroit du monde."},{"id":"text-8","heading":"Text","content":"Illustration où nous permettons à un joueur de mettre à jour sa transformation directement. Aucune vérification n&#39;est faite pour éviter la triche.\nUne technique simple pour empêcher les joueurs de se déplacer plus rapidement (ou de se téléporter!) Consiste à transférer la logique de déplacement du joueur à un ouvrier faisant autorité. Au lieu de permettre au client de mettre à jour la transformation directement sur le lecteur, nous créons simplement un nouveau composant d’entrée par lequel le lecteur peut communiquer."},{"id":"text-9","heading":"Text","content":"Les mouvements de MOBA, comme DOTA 2 de Valve, sont calculés et effectués sur le serveur.\nVoici un exemple de fichier de schéma constituant un composant PlayerInput. Le client a un accès en écriture à ce composant:\npaquet de jeux;"},{"id":"text-10","heading":"Text","content":"composant PlayerInput"},{"id":"text-11","heading":"Text","content":"    id = 12001;\n    float horizontal = 1;\n    float vertical = 2;\n    bool en cours d&#39;exécution = 3;"},{"id":"text-12","heading":"Text","content":"Avoir la logique de déplacement effectuée sur un ouvrier dont vous avez le contrôle le rend totalement sécurisé. Pour le dire simplement, tout ce que le client envoie au travailleur faisant autorité est la direction dans laquelle le joueur s’installe et ses actions, tout comme le contrôle d’un véhicule télécommandé."},{"id":"text-13","heading":"Text","content":"Illustration où nous autorisons uniquement le lecteur à mettre à jour des données sur un composant d’entrée. Le travailleur faisant autorité lit alors ces informations et déplace le lecteur.\nUn problème majeur avec cette approche est la latence. En faisant ce qui est décrit ci-dessus avec une latence quelconque, un joueur verra son personnage bouger légèrement après qu’il lui ait dit de bouger. Dans la mesure où ils attendent que le travailleur faisant autorité déplace le joueur, ils réagiront plus tard. Nous pouvons cependant apporter de simples modifications pour le rendre acceptable.\nVoici un composant PlayerInput modifié permettant la prédiction côté client:\npaquet de jeux;\nimportat &quot;improbable / vector3.schema&quot;;"},{"id":"text-14","heading":"Text","content":"composant PlayerInput"},{"id":"text-15","heading":"Text","content":"    id = 18001;\n    improbable.Vector3f désirée_position = 1;\n    bool en cours d&#39;exécution = 2;"},{"id":"text-16","heading":"Text","content":"Au lieu d’envoyer la direction du mouvement du client au travailleur faisant autorité et d’attendre que le joueur bouge, nous déplaçons immédiatement l’objet joueur sur le client et envoyons la position à laquelle nous sommes actuellement au travailleur faisant autorité. Nous appelons cette position notre «position souhaitée». L&#39;agent faisant autorité vérifie ensuite si nous sommes autorisés à passer de notre dernière position à la nouvelle position souhaitée et met à jour la transformation en conséquence. Deux contrôles simples peuvent être utilisés. Un pour voir si nous avançons trop vite et un autre pour voir si nous avançons dans quelque chose que nous ne sommes pas supposés faire.\nCe n&#39;est cependant pas une solution parfaite. Vous devez encore compenser la latence afin de résoudre le paradoxe du «qui tire en premier». Je recommande de lire ces articles de blog approfondis de Gabriel Gambetta d’Improbable à propos de ce numéro."},{"id":"text-17","heading":"Text","content":"Darkfall Unholy Wars était un MMORPG à la première personne avec un combat complet joueur contre joueur et avec une validation partielle des commandes.\nCommande et demandes\nChaque fois que vous voulez faire quelque chose dans un jeu en ligne, vous envoyez une commande au serveur. Cette commande est formée comme une requête. La réponse que vous recevez du serveur est le résultat de cette demande. En d&#39;autres termes, vous pourriez dire qu&#39;il se comporte comme un appel de fonction simple ou un appel de procédure distante (RPC). Un exemple de requête de ce type pourrait consister à demander de construire un bloc dans Minecraft ou de lancer un sort dans Guild Wars 2.\nIl y a un tas de choses qui pourraient mal tourner si des vérifications ne sont pas en place pour valider ces commandes. Comme je l&#39;ai dit plus tôt, nous devrions toujours supposer que le contenu d&#39;une demande est malveillant et que nous devons toujours nous assurer que les valeurs du contenu sont dans les limites autorisées.\nSans vérification adéquate en place, un pirate informatique pourrait, par exemple, lancer des sorts depuis un emplacement très éloigné de son joueur ou attaquer des ennemis très éloignés d&#39;un lieu sûr. Ce fut le cas dans Darkfall Unholy Wars, un MMORPG que les développeurs ont laissé ouvert pour ce type de tricherie. Dans la vidéo suivante, vous pouvez voir un joueur attaquer d&#39;autres joueurs à une grande distance, entre autres."},{"id":"text-18","heading":"Text","content":"Il n’existe pas de solution véritable à ces problèmes, mais un conseil utile est de toujours vérifier minutieusement toutes les données envoyées avec une commande. Voici quelques exemples:"},{"id":"text-19","heading":"Text","content":"Vérifiez si la position envoyée avec une commande est à la portée du lecteur.\nChaque fois qu&#39;un index est utilisé, assurez-vous toujours que cet index n&#39;est pas hors limites.\nChaque fois qu&#39;un index ou un type est utilisé, assurez-vous qu&#39;ils sont autorisés à utiliser cet index ou ce type. Ne pas le faire pourrait permettre aux joueurs de créer un élément réservé aux administrateurs dans le jeu s&#39;ils envoient des commandes «Créer cet élément».\nLimitez le nombre de personnes autorisées à utiliser des commandes avec des délais de récupération pour éviter les inondations ou les exploits par écrasement."},{"id":"text-20","heading":"Text","content":"Conseils de développement\nPendant que vous développez votre jeu en ligne, vous avez l&#39;outil idéal pour vérifier la tricherie: votre propre projet. Essayez de déplacer votre lecteur dans l’éditeur en supprimant des murs, de vous téléporter et de voler dans les airs. Si vous détectez la moindre chose mais croyez que personne ne l&#39;exploitera, vous vous trompez. Les gens vont essayer de briser les règles et les limites de votre jeu, peu importe quoi. Le mieux est d’avoir une longueur d’avance sur eux et d’essayer de casser d’abord vos propres règles."},{"id":"text-21","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":"https://tutos-gameserver.fr/wp-content/uploads/2019/06/cf27cd5c-trond_anticheat_before.png"},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/06/17/gamasutra-blog-de-trond-fasteraune-ne-faites-jamais-confiance-au-client-techniques-simples-contre-la-triche-en-multijoueur-et-spatialos-un-bon-serveur-minecraft/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}