2017-08-17 45 views
-2

我們有產品和產品圖像API,我們需要向客戶公開。我不想公開在我們的數據庫中生成的產品ID,因爲這些ID是順序ID,任何攻擊者都可以輕鬆更改。當我們通過JS使用這些API時,這些API並不安全,並將暴露給多個客戶端。如何防止從服務器暴露主要ID到用戶界面?

客戶端命中POST API /產品/和請求正文有產品詳細信息。

在響應中我們得到產品uri,即/ product/1 /。這裏1是產品ID。

此外,客戶使用該產品ID即插入像圖片:

/產品/ 1 /圖片/

我很擔心,我們揭露id和這些可以被任何人改變。我讀了this的事。但是我沒有清楚的知道在MVC環境下解決這個問題的正確方法。我們可以將stock_id存儲在「會話」存儲中,或者解決此問題的最佳方法是什麼?

+0

「這些API不安全,因爲我們通過JS使用這些API,並將暴露給多個客戶端」聽起來像通過默默無聞的安全性 - 通常是一個壞主意。這就是說,uniqueidentifier列映射到C#中的Guid,並且不是連續的,除非您告訴數據庫使它們如此。 –

回答

3

客戶端必須有ID,無論您在哪裏存儲它。俗話說「客戶就是敵人的手」。處理這個問題的唯一正確方法是不關心id,而是保護您的API,以便只有被允許更改內容的用戶才能這樣做。

+0

我們將如何保護將從Web客戶端調用的api。通過JavaScript ..? – maverick

+0

可能我們可以發送加密的ID到客戶端..和服務器將解密相同的未來請求..不正確?由於我們只關心客戶端不應該有任何ID的模式 – maverick

+0

您像其他任何人一樣保護您的API:訪問控制。不要讓隨機的陌生人打電話給你的API。 Https用戶名/密碼是最原始的,您需要選擇適合您的機制。 – nvoigt

0

如果我理解正確的問題,目前的流程如下:

  1. 客戶要求產品概述
  2. 客戶端收到的產品和它們的ID列表
  3. 客戶端可以打開產品的詳細信息
  4. 客戶端可以使用該ID來插入圖像。

在我看來,你真的需要增加這麼多隻知道一個ID是需要更新的任何訪問控制。

如果您不能這樣做,您可以添加一個長的隨機的字母數字輔助ID列,並在輸出中使用輔助ID而不是普通ID,也可以使用臨時ID轉換表。

也就是說,我仍然建議認真增加訪問控制,以便人們只能更新允許更新的內容。