2015-12-16 80 views
1

我已經閱讀了很多關於「int vs主鍵的GUID」問題的文章,並且可以看到如果使用順序GUID,則不需要擔心性能太多。使用int作爲主鍵存在安全風險嗎?

我老闆想要使用GUID的原因是他覺得它更安全。我們將所有參數加密成一個MVC調用,所以我不確定我是否看到這個問題,但他的主要觀點是,用一把鑰匙(假設他們可以打破加密),然後很容易猜出下一個密鑰。即使使用僞連續GUID(如COMBs)(http://csharptest.net/1250/why-guid-primary-keys-are-a-databases-worst-nightmare/),您也無法使用GUID執行此操作。

但是使用int確實不安全嗎? (我們使用Triple DES進行加密。)在使int64主鍵「幾乎連續」的情況下是否有任何里程數 - 即它們總是上升但在序列中留下間隙?

如果有人有任何關於此安全性的意見,我將不勝感激。

+1

密鑰類型的選擇與安全性沒有任何關係。一個密鑰的醜陋與安全無關 –

+0

如果你真的關心安全性,那麼就使用存儲過程並只允許執行過程,不能直接訪問表,視圖或其他對象。然後,即使他們猜測身份證,他們可以做的事情也非常有限。 – HLGEM

+0

使用「INT」不會比使用GUID更安全 - 您只需檢查用戶X請求有關帳戶'42'的信息,他實際上有權/允許查看該信息。 –

回答

3

關鍵安全性是關於防止用戶能夠訪問別人的項目。如果你在一個url中使用ints,你可以簡單地用你的id替換一個。例如,如果您的網址是http://mysite/someresource/1/,則可以用http://mysite/someresource/2/替換它。

由於GUID需要花費更多的努力才能找到另一個ID,所以更加困難。然而,這就像樂透。你可以很幸運。因此它仍然不安全。

唯一安全的方法是每次檢查用戶是否有權訪問請求的資源。

我不知道你爲什麼要加密參數?如果是限制訪問,它不是很安全。有人仍然可以將它傳遞給其他人(複製/粘貼),而其他人可以訪問它。社會工程學。

1

如果用戶想要訪問資源「1」或「2」,則必須檢查他是否有權訪問它。如果您使用Guid「A」或「B」,這將是相同的。

1

如果您有跨站點對象(如果您有跨站點對象),則可以同時使用兩者,int用於內部使用(如果您擔心性能)和外部GUID(例如在Web服務的Web URL中)例如跨多個商店的物品在它們之間轉移),guid可以作爲全局標識符。

相關問題