0

サーバー上のphpページと通信するアプリケーションを作成しています。

そのページで、データベースにスコアを設定できます。

post変数を使用してスコアをデータベースに保存します。すべてが正常に機能しますが、ゲームがページに送信しているものをwiresharkで分析し、別のデータでPOSTリクエストを再実行すると、ページはそのデータをデータベースに保存しています。 。

ゲームからのみ保存されているデータを受け入れるにはどうすればよいですか?

ゲームはJavaアプレットであり、サーバーはPHPで記述されています

4

1 に答える 1

3

受信したデータが本物であることを php スクリプトに知らせる方法が必要です。

クライアント側

送信するすべてのデータを連結して文字列にします。現在の日付と時刻 (クライアント側) も文字列に入れます。その情報も送信する必要があります。

次に、たとえば静的文字列「xyw#q''wz」または送信されたデータから派生したものなど、さらにデータを使用して文字列を「ソルト」します。

その文字列をチェック文字列と呼びましょう

最後に、チェック文字列の MD5 ハッシュを計算し、データと現在の日付と時刻と共に送信します。

サーバ側

PHP スクリプトは、すべてのデータと MD5 ハッシュを受け取ります。

クライアント側で行ったのとまったく同じ方法で、受信したデータに対して同じ操作 (連結、ソルティングなど) を実行して、 check-stringを再構築します。

その MD5 を計算し、2 つのハッシュ (受信したハッシュと計算したばかりのハッシュ) を比較します。

それらが一致する場合、データは本物であり、データベースに追加できます。それ以外の場合は、再投稿されていないか、再投稿されています。

-

まとめ

クライアント: データ -> 文字列を作成 -> 文字列から MD5 を作成 -> データを送信 & MD5

サーバー : データ (受信) -> 文字列を構築 -> 文字列から MD5 を作成

(クライアント側 MD5 == サーバー側 MD5) ? はい データ本物 : NO 偽物または転載

-

使い方

どのようなデータ セットでも、有効な MD5 ハッシュは 1 つだけです。誰かが偽のデータを投稿したい場合は、有効な MD5 も渡す必要があります。しかし、彼は MD5 がどのように構築されているかを知りません。

ハッカーを困らせるために、文字列にランダムなデータを「塩漬け」するように言いました。

これは、あなたが望むものを達成するための1つの方法です(私が思うに簡単です)。

クライアント側のアプリが (Java ではなく) JavaScript で記述されていた場合、JS コードがcheck-stringを構築するプロセスを公開するため、このアプローチは非常に脆弱であることに注意してください。

最後の注意として、それは防弾ではありません。賢いハッカーは、チェック文字列をどのように構築するか、または Java を逆コンパイルするかを推測し、(いくらかの労力を払って)チェック文字列がどのように構築され、偽のデータの MD5 を生成するかを突き止めることができます。

于 2013-01-19T14:29:03.047 に答える