「安全な」かどうかは、それが意味するものと、アプリの実装方法によって異なります。ちょっと戻って、Keyオブジェクトに格納されているものを正確に見てみましょう。 、あなたの鍵を取るshell.appspot.com
に移動し、次のように入力します。
db.Key(your_key)
これは、次のようなものを返す:あなたが見ることができるように
datastore_types.Key.from_path(u'TestKind', 1234, _app=u'shell')
を、キーは、App ID、種類の名前が含まれていIDまたは名前(親エンティティの種類/ IDペア - この場合はnone)を指定します。ここに何も秘匿に特に関心があるべきではないので、ここで情報漏洩の重大なリスクはないはずです。
あなたは、ユーザーが他のURLを推測できることを懸念しています。これは、キーを解読し、IDまたは名前を変更し、キーを再エンコードする可能性があるためです。お使いのセキュリティモデルは、他のURLを推測し、それらにないを依存している場合は、しかし、あなたは物事のカップルのいずれかを実行する必要があります
- は、アプリケーションのセキュリティモデルを再検討。あなたがそれを避けることができるなら、あなたは本当のセキュリティの程度のために「秘密のURL」に頼るべきではありません。
- キー名を使用して、ユーザーが推測できない長いランダムな文字列を設定します。
最後に、ユーザーが変更できるものは何ですか?キーをdb.get
に渡してキーを処理する場合、ユーザーは種別名を変更して、意図したものとは異なるエンティティの種類を取得する可能性があります。そのエンティティの種類にも同様の名前のフィールドがある場合は、意図しないエンティティ(データの表示など)を行う可能性があります。代わりにYourModel.get
に鍵を渡すことでこれを避けることができます。鍵を取り出す前に正しい鍵であることを確認します。
これはすべて、キーIDまたは名前を周囲に渡すより良い方法です。キーオブジェクトを使用している場合は、.id()
(キー名を使用している場合はID-.name()
)を呼び出して、元の鍵をdb.Key.from_path('kind_name', id)
で再構築するか、YourModel.get_by_id
で直接エンティティを取得することができます。
返信いただきありがとうございます。私が懸念しているのは、キーがURLセーフではなく、ユーザーが他のURLに基づいて他のURLを推測していることです。数字の数は簡単に増加する整数であり、ハックするのがさらに簡単です。 – MindJuice
安全なURLが必要な場合は、所有者だけが開くことができます。少なくとも認証層を追加する必要がありますが、数値IDを使用する場合はURLを ' –
+1'と推測しにくいものにしないでください。私はキーを使用していて、数値IDはもっと見栄えが良いです。 –