0

これは問題よりも「シンカー」です。javacriptを保護する方法を考えるのに問題があります。

私がこの設定をしているとしましょう:

Main page with iframe in it
Iframe with content.

ここで、ユーザーはiframeでゲームをプレイする必要があるとしましょう。彼がゲームを終了した後、iframeは次のように呼び出します。

window.parent.givePrice();

親はモーダルウィンドウを表示します:

function givePrice(){
  jQuery('.mask').show();
  jQuery('#won').show();
}

このモーダルウィンドウでは、次のようなものになります

Congratulations! you just won a brand new BMW! Click Here to get your price

そして、彼がリンクをクリックした後、彼の名前はデータベーステーブル「winners」に(ajaxによって-関係ありません)署名されます。

(これは単なる例であることを忘れないでください)。

さて、これはすべて素晴らしいように聞こえますが、これには非常に多くのセキュリティホールがあります。たとえば、firebugを使用して、「givePrice();」と記述したとします。ゲームにまったく触れていなくても、勝ったモーダルが直接表示されます。

誰かが話し合うことができますか、このような例を確保するための最良の方法は何でしょうか?

ありがとうございました

4

2 に答える 2

5

誰かが不正行為をするのを防ぐ唯一の方法は、推測(または「勝つ」ことができるものなら何でも)をサーバーへのラウンドトリップにするアクションを実行することです。

  1. 勝ちの試みをトリガーします(たとえば、ユーザーが何かをクリックするか、推測するか、それが何であれ)。
  2. ページは情報(ユーザー名を含む)をサーバーに送信します。
  3. サーバーはいくつかのことを行います。
    1. そのアカウントとIPアドレスに関連するレート制限をチェックします。(したがって、ユーザーは1か月間毎秒勝つことを試みるスクリプトを作成することはできません。)
    2. 推測などをチェックします。
    3. 星が揃っている場合は、そのユーザーが「勝った」ことを記録します。
  4. ユーザーへの応答を表示します。

勝利と勝利の受け入れを別々のステップにしたい場合は、別のラウンドトリップでそれを行います。最初のトリップで、サーバーは一意の承認コードを生成し、ユーザーが獲得したことと、サーバー上の承認コードを記録します。ページがコードを送り返す2回目の旅行では、コードをチェックし(および他のいくつかの不正チェック)、ユーザーが受け入れたものを記録します。

これをクライアント側でのみ行う安全な方法はありません。クライアントから送信されたものは信頼できないことを忘れないでください。

于 2012-04-05T09:13:01.050 に答える
0

純粋なJavaScriptを介してそれを行わず、サーバー側でいくつかのチェックを使用すると思います。Firebugまたは他の同様のツールを使用して、Javascript保護をいつでも破ることができます。サーバーに直接リクエストを送信し、偽のデータを送信する場合でも。

したがって、IMOのすべてのチェックはサーバー側で行う必要があります。ユーザーがゲームを開いたかどうか、次にゲームから実際にプレイしたデータを送信するかどうかなどです。

于 2012-04-05T09:39:09.030 に答える