2012-08-30 74 views
1

問題前面:是否有可能濫用allocate_ids?我可以冒險用盡id嗎?

從我所瞭解的情況來說,allocate_ids將保留一個數據存儲不會用於新實體創建或另一個allocate_ids調用的ID塊。那是對的嗎?

如果是這樣未使用的分配ID已重複使用?如果是這樣,暫停時間是多少?

如果未使用分配的ID永遠不會重複使用,我可以冒險跑出來的id?是否還有其他有害影響(即ID過度巨大)。

背景:

我試圖建立一個系統,以防止通過REST API創建重複的對象。 我在創建初始表單時調用allocate_ids,並在表單中嵌入了id。 當表單提交給REST API時,它將創建帶有嵌入ID的對象。如果提交兩次相同的表單,我將知道不要創建重複的對象。

這可能是表格將被視爲很多次都沒有被提交,在這種情況下,我用跑了很多地方我從來沒有創建實體IDS的風險。這個計劃有什麼問題嗎?

回答

1

幾個問題:

  1. 不要使數據存儲的ID給客戶端。正如@Shay指出的那樣,這是一個安全風險,因爲用戶可以直接操縱數據。

  2. 重複的表單提交的問題基本上是程序流程的問題。爲了解決這個問題,我更喜歡客戶端解決方案(javascript),但如果你堅持服務器端解決方案,那麼使用sessions。創建一個僞造ID,將其保存在會話中,並將其設置爲隱藏字段。表單提交時檢查該字段。

+0

這回答了我的問題,但我仍然很好奇,如果從allocate_ids()返回的ids在未使用時永遠丟失。 – dragonx

+0

是的,他們__將永遠失去。否則這個功能就沒有意義了。 –

+0

什麼?不,將數據存儲ID公開給用戶不是安全風險,並且不允許他們操作數據。讓他們在沒有進一步檢查的情況下設置身份證是一種風險。 –

1

您的系統可以很容易地入侵,有人可以手動更改ID的值,它會覆蓋現有的實體。 創建一個新對象時,只需發佈​​數據並讓AppEngine爲您生成並生成id。

在64位空間allocate_id工作(至少),所以即使你產生每秒10個IDS將採取幾千年跑了出來。

+0

不,如果我只是讓表單發佈,那麼發佈兩次相同將生成兩個實體,不同的ID,這正是我想要阻止的。 – dragonx

+0

然後不要使用ID,使用用戶可以改變來覆蓋其他實體的隨機數。 –

相關問題