2012-01-22 17 views
0

私は野生のマルチプレイヤーモバイルゲームを持っていますが、それはSQLデータベースの支援を受けています。各ゲームは、自動増分フィールドだけのIDを取得します。私のようなURLでゲームを調べることができます。URLは、現時点でのプレイヤーには見えていないことをユニークな整数からのユニークな英数字の文字列ですか? (ゲームサーバーのIDをマスキングする)

http://www.example.com/gameId=123 

が、ユーザーが友人を招待し、非プレイヤーが中に見てみましょうことができますので、私はそれを表示することを考えていました。ゲームをプレイするとき(ブラウザを介して - 誰もがネイティブアプリを使いながら)

しかし、オープンにゲームIDを入れているというのは悪い考えです。誰かがゲームを削除するというエンドポイントを推測した場合、彼らはIDを知っている悪いことをすることができます(もちろん、エンドポイントはユーザー認証で保護されていますが、それでもなお保護されます)。

ほとんどのサービスは、この種のIDをマスクしてください、私は次のようにURLを送信する必要があります

http://www.example.com/gameId=maskedIdAbc 

、その後、私のゲームサーバーは、私のデータベース内の対応するIDにそのIDを変換する必要がありますか?

これが過度であるかどうかはわかりません。そうでない場合は、ユニークな整数に基づいてユニークな英数字の文字列を生成するにはどうすればよいでしょうか?

おかげ

+0

ハッシュ関数を調べましたか?それがすぐに思い浮かぶのです。同時に、攻撃者はあなたがハッシュ関数を使用していると推測することができます。 – c24w

答えて

0

ゲームの主キーを増分IDからGUIDに変更しないでください。ゲームは野生のものですが、あなたはいくつかのステップでそこに着くことができるはずです。 Guidをフィールドとして追加し、IDまたはGUIDのいずれかでゲームを参照できるようにします。クライアントを更新してGUIDを使用し、IDを段階的に削除し、最後に主キーをGUIDに変更します。

intをハッシュすることもできますし、16進数を使用することもできますが、そのブレーク可能です。 GUIDを使用したくない場合は、各DBレコードに対して格納する同等のランダムな文字を実装することができますが、GUIDが通常データベースでサポートされているときに問題になるのはなぜですか?

0

整数の範囲が大きくない場合は、ユニークな、ランダムアルファ-numが文字列でtabbleを定義することができます。私はそれが最善の方法だと思う。

0

私は同様の状況があり、誰かが任意の数字を使用できるので、私はURLにgameID(ここの例を使用)を使用したくありませんでした。私は引き続きIDを使用することができますが、ユーザーを認証するために追加のチェックを追加する必要があります。

gameIDを生成するためにUUIDを使用できますが、これにはほとんど問題はありません。 - 非数値IDはパフォーマンスに影響します - これがプライマリキーで、他のテーブルでFKとして使用する場合は、空白

私が行ったことは、 私のテーブルのgameIDに加えて、別の列のWebGameID varchar(32)を追加しました。ゲームIDが生成された後、WebGameID = MD5(gameID)が更新されました。これは、特定のgameIDに固有の32文字の文字列になります。これにより、内部キーにgameIDを使用することができ、FKの広告では、ユーザーの操作を制限するためにURLにWebGameIDのみを使用します。

関連する問題