2016-05-27 21 views
2

質問の概要を説明する前に、答えはサーバー側の検証ではないことをお伺いしますが、心からお願いいたします。この例ではサーバー側の検証は機能しませんでしたが、他のほとんどのインスタンスでは機能します。ありがとう!Javascript変数をPHPに安全に渡す(AJAXを使用)

サーバー側の検証が機能しないのは、スクリプトがゲームであり、ユーザーがゲームに勝利したかどうかにかかわらず、渡しているということです。また、ユーザーがプレイから獲得したどのように多くのコインで含ま:

if(result == 0){ 
    menu3.innerHTML = "0 Coins Gained"; 
    $.post("end.php", { 
    coins: 0, 
    won: "no", 
    }, function(result) { 
    console.log(result); 
    }); 
... 

ので、明らかにこれはコインの金額を渡し、彼らはAJAXを使用して獲得した場合。彼らは

を受賞した場合彼らの独自のスクリプト

  • 変更結果数
  • 変更を行う

    • 変更コイン額
    • しかし、待って:しかし、誰かが簡単のようなものの任意の数を行うことができます、もっと多くの人々がいる!

      まあ、私はたぶんものを忘れているでしょう。

      ゲームの最終版をリリースする前に、私はそこに座っている人々を欺くことができません!そして、私は何かを忘れてしまった、誰かがフォームを書いて、そのPHPスクリプトにデータを送信し、それから巨大な銀行を作って、巨大な銀行を作り出すことができた。

      また、明確でない場合は、私は初心者ですから、どんな助けもありがとうございます。ありがとう!

  • +0

    ユーザーが変更できないようにする必要があるものはすべてサーバーに保存する必要があります。サーバーは、クライアントではなくコインの数を記録します。クライアントはそれをユーザーに表示するだけです。 – Barmar

    +0

    データベースまたはセッション変数に保管してください。 – Barmar

    +0

    ゲームはJavaScriptであり、PHPではありませんので、JavaScriptから安全に渡されなければならないので、どちらでも保存できません。 – G4mm4R4y

    答えて

    0

    すべてのセキュリティ保護されたデータは、サーバー上に保持する必要があります。ユーザーが変更できるため、クライアントからのものはすべて信頼できません。サーバーは、クライアントから送信された可能性のあるすべてのデータを常に検証する必要があります。

    たとえば、カードゲームをプログラミングしている場合、プレーヤーはカードをプレイヤーの手札に送ります(他のプレイヤーの手ではありません)。 。次に、クライアントが「私がスペードのエースをしています」を返信すると、サーバーは要求を処理する前にこのカードが実際に手元にあることを確認する必要があります。

    別の例として、ローリングダイスを含むゲームをプログラミングする場合は、それをサーバー上で実行する必要があり、サーバーは結果を計算する必要があります。結果はクライアントに送信され、クライアントに表示されます。これによりユーザーにアクションの選択肢が与えられると、クライアントはメニュー(または他のコントロール)を表示し、その選択肢をサーバーに返します。次に、サーバーは、これがユーザーにとって利用可能な選択肢であることを検証します。

    プレーヤーのログイン中に、この情報をPHPセッション変数に保存することができます。プレイヤーの銀行やプレイしたゲームの履歴などの長期保存には、通常データベースを使用します。

    +0

    基本的に結果を送信する代わりに、最初とプロセスを送信し、それが一致するかどうかを確認します。 – G4mm4R4y

    +0

    はい、そうです。ユーザーのアクションを送信すると、サーバーは結果が何であるかを把握します。 – Barmar

    +0

    私はそれが唯一の解決策でなければならないので、これを行います、ありがとう! – G4mm4R4y

    関連する問題