古典的なプラットフォームと HTML5 の 3D fps ゲームの両方のきちんとしたキャンバス デモがいくつかあるので、次のステップはマルチプレイヤー HTML5 ゲームの開発を試すことかもしれません。HTML5 ソケットのサポートにより、これは比較的簡単になりますが、クライアント側のソースはブラウザで誰でも表示できるため、HTML5 フロントエンド マルチユーザー ゲームの基本的なゲーム セキュリティ機能の解決策は何ですか?ハイスコア提出?
2 に答える
簡単な答えは次のとおりです。クライアントからのデータを信頼することはできません。つまり、ハイスコアの送信はクライアントから送信できません。
コードクライアントは誰でも検査できるため、クライアントがサーバーに送信するデータを信頼する方法はありません。ユーザーごとの暗号化キー(可能)を使用してデータを暗号化する場合でも、ユーザーはブラウザー内でコードを変更し、サーバーに送信する値を変更するだけで済みます。
ゲームはマルチプレイヤーであるため、サーバーがすべてのスコアリングイベントを生成する場合、これが可能になる可能性があります。サーバーがすべてのスコアリングイベントを生成する場合、クライアントはスコアデータをサーバーに送信しません。つまり、ハイスコアデータを偽造することはできません。
それでも不正行為に対処する必要があります。これはさらに困難ですが、それは別の問題です...
ラリーが言ったことに加えて、不正行為/偽のスコア投稿を実際に防ぐために、バックエンドでスコアリングを処理する必要があることは間違いありません.
実際の例としては... Word Warsというゲームは、4x4 の文字のグリッドからできるだけ多くの単語を見つけるボグル風のゲームです。
各ゲームの開始時に、サーバー側で 4x4 ボードが生成されます。そのボードの可能な単語のリストが生成され、各単語のハッシュ バージョン (ランダム ソルトで md5 化) とソルトがクライアントに渡されます。
クライアント側では、文字を入力して Enter キーを押すと、入力された単語を (サーバーからのソルトを使用して) md5 し、サーバーから提供されたハッシュ化された単語のリストと照合します。一致した場合は、新しいスコアでクライアントを更新します (使用された文字とそのポイント値に基づく関数があります)。
ゲームが終了すると、クライアントは思いついた単語のリスト (スコアではありません) をサーバーに送信し、サーバーはそれらの単語がボードに存在することを再確認し、スコアを処理します。
これが、私が働いている Clay.io の出番です。Clay.io は、リーダーボード、実績、支払い処理などの高レベルの HTML5 ゲーム機能の API を提供しています...言うまでもなく、私たちは次のソリューションを必要としていましたハイスコアなどの特定のものをより安全にするためのバックエンドを持つゲーム。
解決策は、JWT (JSON Web Token) を使用してバックエンド (node.js、php など) で JavaScript オブジェクトを暗号化し、スコア自体ではなくその暗号化されたオブジェクトを渡すことでした。これにより、双方向 (ゲーム -> Clay.io および Clay.io -> ゲーム) で通信することができ、非常に簡単に行うことができます。これに関する完全なドキュメントはここにあります:clay.io/docs/encryption(この回答でヒットする最大リンク)
Word Wars に戻ります... サーバーから、ユーザーのスコアでその JWT を生成し、それを Clay.io に渡してスコアを投稿します。出来上がり:)
もちろん、開発しているゲームの種類が異なるため、これは異なりますが、ストーリーの教訓は、創造性を発揮する必要があるということです:)
HTML5 のゲーム セキュリティについて詳しく説明するブログ記事を書きました。HTML5 ゲーム開発のヒントに関するシリーズのパート 3。