2

Google Datastore にあるデータのエンティティ ID を公開するのは保存されますか。たとえば、私のコードでは、次の ID を持つエンティティがあります。

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;

ID は次のようになります: agptZeERtzaWYvSQadLEgZDdRsUYRs

誰でもこの文字列からパスワード、アプリケーション URL、およびその他の情報を抽出できますか? その文字列の意味は何ですか?

4

3 に答える 3

2

そのエンティティ ID には、オブジェクト ID、アプリケーション ID、およびオブジェクト クラス名が含まれます。それは単なるエンコードされた文字列です。実際には、いかなる種類のセキュリティリスクもありません。

于 2009-07-15T18:52:38.563 に答える
1

KeyFactory を使用して、次の URL Google App Engineのように keytoString、stringToKey に変換できます。

Google App Engine のデータ ストレージの一意の ID であると私が信じている ID。

キー インスタンスは、KeyFactory メソッドの keyToString() および stringToKey() を使用して、エンコードされた文字列表現との間で変換できます。

エンコードされたキー文字列を使用する場合、追加フィールドを使用してオブジェクトの文字列または数値 ID へのアクセスを提供できます。

お役に立てば幸いです。

虎。

于 2009-07-11T16:15:43.293 に答える
0

localhost:4321/_ah/admin に移動すると、sdk データストア ビューアーを利用できます。ここでは、あらゆる種類のエンティティに KEY フィールドと NAME/ID フィールドがあることがわかります。

@PrimaryKey として long、String、または Key を使用するかどうかにかかわらず、ID/Name 列には String/number が含まれ、KEY 列にはその ID のエンコードされたキーが含まれます。他の投稿で述べたように、このエンコーディングは {md5s、おそらく} appspot アプリケーション ID、データ オブジェクトの完全修飾クラス名、および @PrimaryKey として指定したものをハッシュします。

このフィールドへの直接アクセスが必要になるのは、データの名前をまったく気にしない場合、{プログラムでデータを見つける必要があるが、人間が単語を推測してデータを検索することはない場合のみです。テキストボックス}、または同じタイプと名前の複数のオブジェクトが必要な場合{バージョンintを使用している可能性がありますか?}、エンコードされたキー構文を使用する必要があります。クラスにフィールドを配置するかどうかに関係なく、KEY と ID の両方がデータベースに存在します。エンコードされたキー構文を使用すると、この値にアクセスできます。

また、エンコードされたキーを使用するアプリケーションには速度ボーナスがあります...クエリには SELECT * と SELECT _ _ key _ _ {2 つの _ があることを示すために使用されるスペース} の 2 種類しかありません。AJAX アプリの大きなデータ セットの場合、データをページ分割する唯一の効率的な方法は、すべてのキーを選択してクライアントに送信し、クライアントに 0->X 個のレコードを要求させ、他の X-> のリンクを作成することです。 Y の結果、完全なデータのエンコードされたキーの最初のセットでサーバーにクエリを実行し、応答を素敵な小さなリストに解析し、すぐには役に立たない 397 サーバー データ オブジェクトのロードを回避します。

暗号化された鍵をネットワーク上で上下に送信すると、暗号化されていない鍵よりも帯域幅が少し多くかかる場合があります (ただし、私のように名前を付けるのに時間がかかっている場合を除きます)。しかし、それは appengine の CPU サイクルを削減し、クォータをより満足のいくものにし、すべてのアプリの実行速度をほんの少しだけ速くします!

このキーは、何らかの方法でハッシュ化されていない場合でも、PrimaryKey を作成するのと同じくらい機密性の高いデータのみを公開します。アプリのパスワードは関係ありません。また、適切なデータ モデルのユーザーのパスワードも関係ありません。提供された User クラスを認証に使用する場合、またはソースで使用するクラス名を使用する場合、{大きな可能性がある}唯一の漏れはユーザーのメールアドレスです。

...基本的に、firebug リクエストを 1 つまたは 2 つ監視することですでに利用可能な情報のみが公開される可能性があります。

于 2009-08-18T13:26:53.063 に答える