2010-09-03 54 views
2

我正在構建電子商務應用程序。訂單路徑看起來像/Orders/Details/{orderId}。 但是我不想將訂單公開給最終用戶。 如何識別訂單,而不是使用數據庫標識符? 是否有必要生成一些像GUID一樣的隨機唯一字符串?隱藏最終用戶的實體ID

+0

我認爲這有助於理解你想要做這件事的動機? – Cocowalla 2010-09-03 18:53:45

+0

用戶發出一個命令,他看到它的id - 1000例如,第二天他又發出一個命令,新訂單的id是1050 - 現在用戶知道我有一天50個訂單 - 我不希望他知道這一點。 – kilonet 2010-09-03 18:57:42

+0

然後,我會選擇我的答案中的第一個選項,並添加一個備用密鑰。這可能是實際訂單ID的散列,或者只是您生成的一個隨機數。任何你喜歡的東西都是獨一無二的,你很樂意向顧客展示。 – Cocowalla 2010-09-03 19:27:08

回答

2

您需要爲您不介意用戶看到的實體(某種備用密鑰)指定一些其他標識符。

或者,您可以使用加密或混淆的ID,並讓您的應用程序處理解密或解混淆。

+0

如果userId和orderDate唯一標識了順序,那麼使用它是否安全(userId.asString()+ orderDate.asString())。hashCode()? – kilonet 2010-09-03 18:43:05

+1

否 - hashcode不能保證產生唯一的值 – Cocowalla 2010-09-03 18:52:00

0

您可以將價值發佈到訂單/詳細信息頁面,並以此方式發送訂單ID。您也可能有其他一些唯一的字符串用於訂單並使用它,具體取決於您如何存儲數據以及爲什麼要隱藏訂單ID。

1

您正處於正確的軌道 - 使用整數作爲orderid會導致強制瀏覽攻擊。也許你可以使用GUID作爲數據庫中的主鍵。

+0

它可能是一個問題在URL中使用GUID – kilonet 2010-09-03 18:40:21

+2

重要的是要注意,你不應該僅僅依靠這種'混淆';你仍然應該確保未經授權的用戶只要知道實體的ID就不能做任何有害的事情。 – Cocowalla 2010-09-03 18:41:08