1

ユーザー/ブラウザーが Javascript コードを手動で操作または実行するのがどれほど簡単か疑問に思っています。

質問する理由は、ブラウザベースのゲームを作ることを計画しているからです。できるだけ多くのプラットフォームでアクセスできるようにしたいので、Java の代わりに Javascript を使用しています。

これが私が言いたいことの一般的な例です: ユーザーはゲームのページに行くかもしれません。JS には、プレイヤーの健康や体力の値など、いくつかの変数が格納されます。プレイヤーがモンスターを攻撃することを選択した場合、その結果は、保存されているいくつかの変数と、戦闘中に生成された変数から決定されます。

プレーヤーは、保存された変数を操作したり、JS 関数の 1 つ (AJAX 呼び出しが行われるようにする関数など) を呼び出したりできますか?

もしそうなら、どうすればそれを防ぐことができますか?サーバーで各アクションを確認できましたが、帯域幅を大量に消費します。

4

4 に答える 4

3

を押して、コンソールF12を開き、ハッキングします。

グローバル スコープ内のものはすべて、変更に対して脆弱です。

ただし、ゲーム ロジックをクロージャで囲むと、アクセスが非常に難しくなります。

そう:

(function() {
    // all your game code here
})();

これにより、ローカル変数へのアクセスが妨げられます。でそれらをすべて適切に宣言していることを確認してくださいvar

また、コードを難読化して変更を困難にすることを確認し、ハイスコアの送信などの通信を受け入れるときは特別な注意を払ってください。私は、その場で作成した方法 (基数 10 から基数 42 への変換など) で暗号化するのが好きです。

可能な限り、プレイヤーのアクションをサーバーに送信し、それらが有効であることを確認してください。可能であれば、サーバー側でゲームの状態を維持します。これは、プレーヤーがルールに従ってプレイしているかどうかを確認するためでもありますが、副作用として、ユーザーがページをリロードした場合にゲームを再開することもできます。

全体として、詐欺師を止めることはできませんが、詐欺師を本当に難しくすることはできます。

于 2012-04-05T21:10:49.033 に答える
0

開発者コンソールを開いたことがありますか?ページで実行されているすべてのスクリプトにアクセスできます。ロードされたものはすべて操作できます。

特定のクロージャーでコードを実行することで、それを難し​​くすることができます。クロージャに関するこのSOの回答は、物事を明確にするのに役立つ可能性があります。JavaScriptクロージャはどのように機能しますか?

しかし、JavaScriptは実行時のイントロスペクションを可能にするため、誰かが本当にそこに入り、自分たちの利益になるように物事を変更したい場合、それはすべてクライアント側であるため、不可能なことは何もありません。

于 2012-04-05T21:09:31.647 に答える
0

この方法で不正行為を防止する唯一の方法は、サーバーですべてのアクションを確認することです。プレーヤーが適切なツールを使用してすべての JavaScript にアクセスできなくても (アクセスできる場合)、ネットワーク レベルでシステムを攻撃することができます。

唯一の代替手段は、javascript がトラステッド プラットフォーム モジュール API を何らかの方法で取得した場合です。

于 2012-04-05T21:24:11.250 に答える
0

実際の値の操作を防ぐことはできないかもしれませんが、検証によってもう少し複雑にすることができます。

これが私の言いたいことです。あなたがヘルス値を保護しているとしましょう。そして、それが「helath」と名付けられたとしましょう。別のヘルス値を宣言します。たとえば、「hcheck」という名前を付けますが、それをヘルス値と等しくしません。-52 または +786 などのオフセット値を指定します... xor 値を保存するか、または... 創造的であることもできます。後で、ヘルス値が hcheck 値に対応するかどうかを確認し、一致しない場合は、実際の値をデコードしてヘルスに戻します。

もちろん、ヘルス値と hchek 値の間の何らかの計算となる 3 番目の値を使用して、必要に応じてさらにソルトすることもできます。

はっきりさせましょう。これは 100% 保護されることを保証するものではありませんが、初心者にとっては複雑になります。経験豊富な人は、3 番目の保護値を使用しても塩漬けになっているのを見て時間を無駄にしたくありません (あなたにはわからないかもしれません)。いくつの保護値/レイヤーがありますか) :)

ああ、誰かがあなたのリードに従い、すべての変数の値を修正する時間と神経を持っているなら、彼らはチートするに値します ;)

于 2020-03-22T17:37:50.987 に答える