1

私の XNA ゲームはWebRequest、ユーザーのデータベースをチェックし、パスワードが正しいかどうかをチェックする PHP ページを使用して Web サイトに接続する必要があります。

「成功」「失敗」などのメッセージを返すログイン スクリプトが既にありますが、明らかにこれは一時的なものであり、セキュリティ上の理由から改善する必要があります。簡単に偽造される可能性があります。

C# ログイン リクエスト

    //Create the POST data
    ASCIIEncoding encoding = new ASCIIEncoding();
    string postData = "username=" + user + "&pass=" + pass;
    byte[] data = encoding.GetBytes(postData);

    //Make a request
    WebRequest request = WebRequest.Create("http://example.com/login.php");
    request.Method = "POST"; //We are posting the info
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;

    //Open a stream, write into, then send it
    Stream stream = request.GetRequestStream();
    stream.Write(data, 0, data.Length);
    stream.Close();

    //Get response
    WebResponse response = request.GetResponse();
    stream = response.GetResponseStream();

    //Make a new stream, We will read from this
    StreamReader sr = new StreamReader(stream);
    string responseString = sr.ReadToEnd();

    //TODO: If the responseString says the client if authenticated, procede, if not, display error to user (Invalid password, etc)

そして、PHP スクリプトはユーザーを見つけて、送信されたパスワードを比較するだけです (これらはすべて Joomla サイト データベースと統合されているため、ユーザーはサイトとゲームのアカウントを持っています)。

さて、私の PHP スクリプトはどのようにして信頼性の高い認証方法を送り返し、ある種のトークン/ID を提供することができるでしょうか。たとえば、後でハイスコアを送信したい場合、このユーザーからのものであることがわかります。捏造じゃない?

4

2 に答える 2

3

率直に言うと、PHP スクリプトで受信しているデータが実際にクライアントからのものであることを確認する実際の方法はありません。あなたができる最善のことは、それを難し​​くすることです。これにどれだけの時間を費やすかに注意してください。これは深い井戸であり、不正行為をしたい人はそうなります。

セッションハイジャックは、あなたの情報にアクセスしたり操作したりしようとしているサードパーティにのみ関係があります. ゲームの場合、このサード パーティはユーザーのハイ スコアを気にせず、クレジット カードとパスワードを要求します。(パスワードは別の話ですが、SSL が必要です)

あなたの説明から、あなたは主に不正行為に関心があり、本質的にすべての不正行為は第一者です。プレイヤーはチートしたい。(ほとんどの) 不正行為を防止する唯一の確実な方法は、自分のシステムでゲームを実行し、クライアントの制御をできるだけ少なくすることです (例: EVE Online、Diablo 3、Blizzard など)。通常、これを実現するのは非常に難しいため、いくつかの代替案を提案します。

敵を理解するためのメモリ編集ツールはたくさんあります。インジェクション機能からお金を 100 から 999999 に変更することまで、すべてを行うことができます。数値 (スコアなど) の変更には 15 分ほどかかりますが、あまり得意ではありません。

健全性チェック。PHP で、提出されたスコアが実際に意味のあるものであることを確認してください。クライアントから取得するものはすべて操作されていると想定してください。

パンクバスター。Punkbuster のような会社に支払うか、VAC を使用できる (できる可能性がある) Steam でゲームを取得します。これらのツールはどのように機能するかを公表しておらず、VAC には遅延禁止システムさえあるため、何が原因かはわかりませんが、大まかに言えば、メモリの変更を監視したり、既知のハッキングをスキャンしたりします.

正直。ええ、そうです (j/k)。笑、しかし本当に: あなたは友達を信頼していますよね? グリーファーのいないスコアボードを検討してください。

シーズンベースのスコアボードのようなものを実装するのでしょうか? スコアボードは X 日ごとにリセットされます。これにより、不正行為へのインセンティブが減少します。

そして、それはほとんどそれです。メモリの値を難読化しようとすると、私のような人を止めるかもしれませんが、誰かがそれを十分に望んでおり、十分に知っている場合、彼らはそれを壊してツールをリリースすることができます.

ただし、ハッキングする価値のあるものを最初に作成してください。人々が不正行為を行った場合、それは素晴らしい兆候であり、あなたは幸せを感じるはずです.

于 2013-06-18T23:59:24.180 に答える
0

あなたはを参照していSession Tokenます。セッション トークンは、サインイン後の一定期間のアクションを認証するための優れた方法です。PHP は、セッション トークンをユーザー名に関連付けることができます。このユーザー名は、一定時間後にサーバー プロセスによってクリーンアップされます。再度ログインします。

于 2013-06-18T22:08:44.477 に答える