1

JavaScript を使用して HTML5 ゲームを作成しているとします。変数は、、<canvas>などの DOM に格納されます。levelexpcurrent_map

明らかに、それらは Firebug を使用してクライアント側で編集できます。セキュリティを最大化するにはどうすればよいのでしょうか?編集 (およびチート) が非常に難しくなりますか?

4

4 に答える 4

4

妥当なレベルのセキュリティが必要な場合は、変数をDOMに保存しないでください。JavaScriptは、難読化されていても、簡単にリバースエンジニアリングできます。これにより、ローカルの暗号化メカニズムが無効になります。

キー変数をサーバー側に保存し、httpsを使用してセキュリティを最大化します。それでも、クライアントコード(JavaScript)はハッキングに対して非常に脆弱です。

于 2012-06-06T00:31:33.903 に答える
1

クライアントに存在するものはすべて変更できます。これは、MMORPGではキャラクターのデータがサーバー上に存在するため、プレーヤーはメモリツールや16進エディターなどを使用してキャラクターをハッキングできないためです(実際には「可能」ですが、サーバーがキャラクターのデータの正しいバージョンを保持しているためです)役に立たない)。

良い例はDiablo2です。実際には2つの異なるキャラクターがあります。1つはシングルプレイヤー用(および1つはサーバーである他のプレイヤーとネットワークでプレイ)、もう1つはBattle.net用です。最初のケースでは、人々はキャラクターのレベルとポイントを「ハッキング」して、その場でメモリを編集したり、16進エディタでキャラクターファイルを編集したりすることができます。しかし、Battle.netで使用していたキャラクターではそれは不可能でした。

もう1つの簡単な例は、回答する時間が限られているクイズです。クライアント側ですべてを処理する場合、プレーヤーはそれをハッキングして経過時間を変更し、常に最高のスコアを取得する可能性があります。したがって、タイムスタンプもサーバーに保存し、その値を比較として使用して回答を得る必要があります。

要約すると、JavaScript、C ++、アセンブリのいずれであるかは関係ありません。ルールは常に「クライアントに依存しない」です。ゲームデータのセキュリティが必要な場合は、クライアントがアクセスできないもの、つまりサーバーを使用する必要があります。

于 2012-06-06T00:54:23.283 に答える
1

Object.freezeまたは、ポリフィルまたは非表示を行うフレームワークを使用できます。

http://netjs.codeplex.com/をチェックしてください

オプションで、ある種の署名システムを実装することもできますが、実際に侵入できないものはありません。たとえば、オブジェクトがロックされているObject.freezeObject.watch、メモリ内で手動で変更できます。

最終的に本当に何を達成しようとしていますか?

あなたができることは、ゲームのマトリックスまたはゲーム自体の表現、または特別なハッシュまたは両方の組み合わせを送信し、サーバーでスコアを集計することです...ユーザーはスコアを変更するだけでなく、ゲームの状態を正しく変更します。

于 2012-06-06T00:30:44.047 に答える
1

サーバー側のゲーム ロジック

サーバー上に機密データを保持し、ブラウザ上に表示目的のみのローカル コピーを保持する必要があります。次に、これらの値を変更するすべてのアクションについて、サーバーがそれらの検証を担当する必要があります。たとえば、プレーヤーがパズルを解く必要がある場合、ソリューションのクライアント側を検証する必要はありませんが、たとえば、文字列として表される順序付けられたピースのハッシュ値をサーバーに送信して、ハッシュ値が正しいことを検証します。次に、プレイヤーの経験値/レベルを上げて、情報をクライアントに送り返します。

于 2012-06-06T01:40:41.930 に答える