1

前面的问题:

据我了解, allocate_ids 将保留一个 id 块,数据存储不会将其用于新实体创建或另一个 allocate_ids 调用。那是对的吗?

如果是这样,未使用的分配 id 是否曾经被重用过?如果是这样,超时时间是多少?

如果未使用的已分配 id 永远不会被重用,我会冒 id 用完的风险吗?是否有任何其他不利影响(即 id 变得过大)。

背景:

我正在尝试创建一个系统来防止通过 REST API 创建重复的对象。我在创建初始表单时调用了 allocate_ids,并将 id 嵌入到表单中。当表单提交到 REST API 时,它会创建具有嵌入 ID 的对象。如果同一个表单被提交两次,我会知道不要创建重复的对象。

表单可能会被多次查看而没有提交,在这种情况下,我冒着用完很多我从未创建实体的 id 的风险。这个计划有问题吗?

4

2 回答 2

1

您的系统很容易被黑客入侵,有人可以手动更改 ID 的值,它将覆盖现有实体。创建新对象时,只需发布​​数据并让 AppEngine 为您生成和标识。

allocate_id(至少)在 64 位空间中工作,因此即使您每秒生成 10 个 id,也需要数千年才能用完它们。

于 2012-08-30T04:34:02.700 回答
1

几个问题:

  1. 不要向客户端公开数据存储 ID。正如@Shay 所指出的,这是一个安全风险,因为用户可以直接操作数据。

  2. 重复提交表单的问题基本上是应用程序工作流程的问题。为了解决这个问题,我更喜欢客户端解决方案(javascript),但如果您坚持使用服务器端解决方案,请使用session。创建一个伪造的 ID,将其保存在会话中,并将其设置为表单中的隐藏字段。提交表单时检查此字段。

于 2012-08-30T08:38:15.957 回答