2010-03-12 92 views
9

比方說,我有一個網站有很多關於我們產品的信息。我希望我們的一些客戶(包括我們)能夠通過各種方法查找我們的產品,其中包括:安全API的最佳實踐?

1)從AJAX調用中提取數據,返回數據以酷,JavaScripty方式運行 2)創建使用該數據的iPhone應用程序; 3)讓其他Web應用程序使用該數據來實現自己的目的。

通常,我只是創建一個API並完成它。然而,這些數據實際上是溫和保密的 - 也就是說我們不希望我們的競爭對手能夠在每天早上查看我們所有的產品,然後自動設定價格以削弱我們的價值。而且我們也希望能夠看看誰可能會濫用這個系統,所以如果有人每天對我們的API進行一千萬次複雜的調用並使我們的服務器陷入困境,我們可以將它們關閉。

我的下一個合乎邏輯的步驟是創建一個開發人員密鑰來限制訪問 - 這對於web應用來說可以正常工作,但對於任何AJAX調用來說都不是那麼好。 (正如我所看到的,他們需要提供JavaScript中的密鑰,這種密碼是純文本且容易看到的,因此實際上根本沒有安全性,特別是如果我們在我們的網站上使用我們自己的開發人員密鑰以便進行這些AJAX調用。)

所以我的問題是:在環視Oauth和OpenID一段時間之後,我不確定是否有解決方案可以處理上述所有三個問題。對於開發者的密鑰是否有某種規範的「最佳實踐」,或者Oauth和OpenID可以以某種我尚未討論的方式輕鬆處理AJAX調用,或者我完全錯過了某些東西?

回答

4

我認爲兩腳OAuth是你想要滿足#2和#3。對於#1我會建議,而不是直接針對您的應用程序的JS請求,他們可以通過他們自己的Web應用程序代理這些請求。

+0

但是,如何保護這個API代理服務器以防止攻擊者濫用它? – Constantin 2010-09-11 19:19:06

1

中途解決方案是需要API密鑰;然後要求任何使用它的人都不會直接使用AJAX;但包裹他們的電話在服務器端的請求,例如:

AJAX -> customer server -> your server -> customer server -> user 

創建有關各方一個簡單的PHP API不應過於棘手,和你自己的iPhone應用程序顯然會切出的中間人,與航運他們自己的API密鑰。

+0

必須有辦法做到這一點 - Google Analytics不是通過允許您將一些JS權限粘貼到您的頁面中並以某種方式進行安全的API調用來實現此目的嗎?我想知道他們是怎麼做到的。 – 2010-04-02 06:46:41

1

OAuth和OpenID不太可能與AJAX調用直接有關。最有可能的是,您將在您的AJAX處理程序前擁有某種授權過濾器來檢查cookie,並且可能將該cookie設置爲OpenID身份驗證的結果。

看來這是回到「how do I prevent screen scraping」的問題。如果只有登錄的客戶可以看到價格,那是一回事,但假設您像大多數零售網站一樣,並且您註冊客戶的障礙越少越好,但這並沒有什麼幫助。

而且,嘿,如果您的價格不是可用,那麼您不會在Froogle,Nextag或PriceGrabber等搜索引擎中顯示。但這更多的是商業策略決策,而不是編程策略。