2013-05-02 76 views
3

我對文檔有一個寧靜的服務,其中文檔存儲在mongodb中,文檔的restful api是/ document /:id,最初:api中的id使用mongodb的對象ID,但是我奇怪的是,這種方法揭示了數據庫ID,並揭露了潛在的威脅,如果我想用假名ID來代替它。使用數據庫ID作爲restful服務id暴露威脅?

如果需要它來取代它的假名ID,我不知道是否有一個算法的方法對我來說,改造的對象ID和假名ID來回沒有太多的計算

回答

1

首先,沒有「數據庫包含在ObjectID中的「id」。

我假設您的關注來自the spec列出一個3字節機器標識符作爲ObjectID的一部分的事實。有幾件事要注意:

  1. 大部分時間,ObjectID實際上是在客戶端而不是服務器(儘管它可以)生成。因此,這通常是應用程序服務器的機器標識符,而不是數據庫
  2. 3字節機器標識是機器主機名稱或MAC /網絡地址的(md5)散列的前三個字節,或者是虛擬機的ID(取決於具體的實現),所以它不能被逆轉回任何特別有意義的東西

有了上述想法,你可以看到擔心暴露信息並不是真正的擔憂。

然而,即使是一個小樣本,猜測有效的ObjectID也是相對容易的,所以如果你想避免那種類型的流量衝擊你的應用程序,那麼你可能想要使用其他的東西(ObjectID的hash例如)是一個好主意),但這將取決於您的要求。

+0

謝謝,亞當和objectID的哈希符合我的需求,並且https://github.com/ivanakimov/hashids.node.js是一個很好的遵循 – user824624 2013-05-02 17:19:50