canvas ベースの HTML5 ゲームを書きましたが、問題があります。
私はそのようにvarを使用します:
var score = 0;
// another code
++score;
ただし、ユーザーはその var を編集できます (たとえば、FireBug または Chrome エディターで) - ハッキングされたスコア。
何か案は?
canvas ベースの HTML5 ゲームを書きましたが、問題があります。
私はそのようにvarを使用します:
var score = 0;
// another code
++score;
ただし、ユーザーはその var を編集できます (たとえば、FireBug または Chrome エディターで) - ハッキングされたスコア。
何か案は?
Javascriptは、実行されるクライアント側です。クライアントで発生することはすべて、それによって制御できます。それを回避する方法はありません。コードを難読化することもできますが、それではチート方法を見つけるのが少し難しくなります。十分に決心している人を止めることはできません。
チートプルーフのゲームを設計する唯一の方法は、サーバー上ですべてのゲームの仕組みを実行することです。もちろん、これは技術的にはるかに困難であり、ユーザーが接続不良になったときにゲームエクスペリエンスを損ない、より多くのサーバー容量が必要になるため追加のリソースが必要になりますが、これが唯一の方法です。
ちなみに、特にゲーム開発に関する質問用の姉妹サイトhttp://gamedev.stackexchange.comを入手しました。あなたはそこでいくつかのより良い答えを得るかもしれません。
クライアント側で実行されるコードを実際に保護することはできません。
したがって、変数の内容を保護することはできません。Guffaが言ったように、ハッキングをより難しくすることしかできません。
スコア変数をローカル変数としてクラスコンストラクター内に置くことができます。そうすると、次のようになりにくくなります。
function MyClass() {
var score = 0;
this.somethingHappened = function() {
if (someondition) {
score++;
}
}
this.getScore = function() {
return score;
}
}
もちろん、コードをハッキングすることは可能ですが、グローバル変数を変更するほど簡単ではありません。
これを回避するためにできることは何もありません。コードを難読化することでより困難にすることができますが、それでもスコアをハッキングすることは可能です.
さらに難しくする方法の 1 つは、スコアを 2 回保存し、ループまたは一部の関数で、ゲーム ロジックの外でスコアが変更されたかどうかを確認することです。この方法では、ユーザーは両方の変数を見つける必要があります。
また、2 番目のスコア値が別のスコア値の 2 倍である場合、現在のスコアをすべての変数スコアと比較して見つけるのはさらに困難です。
http://www.crockford.com/javascript/private.html
jsのプライベートおよびパブリック変数に関するCrockfordの記事を参照してください