2015-07-21 86 views
6

我一直在構建Symfony2(用於後端)和AngularJS用於前端的電子商務項目。目前Symfony部分僅用作API,其具有三個不同的用戶級別(來賓,客戶&admin)。可以在系統內進行(如添加/移除數據)不同的動作被固定:Symfony2 REST風格的API + AngularJS

1)Symfony2的與用戶角色/訪問控制
2)防火牆JMS安全額外(@PreAuthorize表達式)

對於安全的部件,一切都按預期工作,我對工作方式非常滿意。

問題:

有其是公共的(像檢索產品信息,類別等)的API的一部分。我在Angular中用Ajax調用我的API來檢索這些數據,該API返回JSON格式的數據。一個例子是:

/API /產品/ GET-所有/頁= 1 &數= 10 &排序[ID] = ASC

的問題是,任何人都可以看在瀏覽器中請求並複製路徑並訪問所有數據(如所有產品),並可以下載所有信息的JSON。雖然這些數據是「公開的」,但我不想給別人這樣一個「偷」我的數據的簡單方法。

理念&可能的解決方案:

1)我一直在尋找在JWT(JSON網絡令牌)的標準,試圖確保市民來電到我的API和我產生了這樣的方式實現它用於網站上的「真實」用戶的令牌,並且這種限制直接訪問公共API鏈接。

您認爲如何?這會是一個可能的解決方案嗎?

2)我也在閱讀關於StackOverflow的其他一些問題,我可以從請求中檢查HTTP_X_REQUESTED_WITH標頭,但我們都知道這可能很容易被攻擊者欺騙。 3)最後,我讀了類似的方法來解決方案1)在這裏:http://engineering.talis.com/articles/elegant-api-auth-angular-js/,但我不完全確定這符合我的目的。

其他注意事項:

  • 我不想讓這個防彈的,但我也不想給人們點擊2個按鈕,讓我的所有數據的選項。我知道最終所有的信息都可以被「偷走」(例如,通過使用網絡刮板),但是「保護」系統使得人們不得不做出一點努力是我的想法。
  • 我真的不能再模型我的API在這個階段太多,但任何想法,將不勝感激

感謝您抽出寶貴的時間來閱讀我的問題,我期待着任何反饋。

+0

Azure的API管理你不能真正保障公衆的數據,因爲你_want_公衆能夠看到這些數據。你可以嘗試讓所有數據變得更加困難,但這就是全部。只要接受公共數據是公開的,並且將您的權力投資於更好,更有生產力的東西。 – smat88dd

回答

2

你可以限制你的系統的濫用在許多方面,其中包括:

  • 限制API將需要CAPTCHA或其他一些前返回請求總數驗證方法。這可能受到IP,瀏覽器指紋,身份驗證令牌等的限制。

  • 使濫用者難以通過使用GUID或其他隨機生成的ID來猜測產品,類別等的ID。

  • 使用API​​管理代理,如爲這些API的更多企業級管理(http://justazure.com/azure-api-management-part-one-introduction/

0

你可以嘗試這樣的:

  1. 訪問該網站,匿名用戶首先需要填寫驗證碼來獲得臨時令牌。
  2. 添加推薦人檢查。
  3. 匿名用戶可查看的數據量有限。例如,前50個產品。

這樣,每個想要竊取數據的人都需要通過填寫驗證碼並更改引用來獲取匿名臨時令牌。