2012-03-15 105 views
0

我正在爲我的網站開發API服務。我已閱讀了很多關於此主題的文章,但無法確定哪種最佳解決方案適合我。我需要保護我的API嗎?

我的API很簡單。每個用戶獲得一個API密鑰每個應用程序連接到我的網站。 只有2個不同的電話ATM:

  • SEND_DATA
  • GET_DATA

的GET_DATA安靜無害,與SEND_DATA你可以結束了新條目你的小應用程序。儘管呼叫受到限制,但可能會出現安全問題。如果這些數據落入了錯誤的手中,這些數據都不會有用。服務器端我保護的SQL注入等

電話是這樣的: http://example.com/api/?call=send_data&data=DATAXYZ&api_key=KEY

親:

  • 這是超級好用

的CON:

  • 這不是安全的

我在這裏和其他地方讀到了很多類似的問題,並且OAuth幾乎在所有這些問題上彈出來作爲可能的答案。我知道OAuth,我認爲這對於我想讓我的用戶很容易使用的東西來說是一個很大的開銷。

正如本文中解釋它並不總是需要使用授權: http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

難道這一切真的爲我的情況太雖然還是你還會推薦認證有或沒有OAuth的?

回答

2

不要將API密鑰作爲GET參數發送:它至少會在瀏覽器的歷史記錄中(也可能在代理中,如果有的話)記錄,這不是非常安全。反而張貼它。

,我不認爲這將是不安全的,事實上廣泛使用的基本接入認證發送用戶名和密碼以純文本(base64編碼),並使用形式,而實際上登錄到任何Web服務,您也以純文本格式發送密碼。當然,這是假定客戶端和服務器之間的通信是安全的,所以你可能想要使用HTTPS。

+0

感謝您的回答和建議!沒有得到?這太糟糕了。它使API調用對於不熟悉系統的用戶來說更加「複雜」。 這個想法是,我會有我自己的應用程序與API連接,但其他開發人員。也可以製作應用程序或腳本。所以我想沒有辦法避免HTTPS。 – bottleboot 2012-03-19 12:03:53

+0

如果您只是想要控制每個用戶的近似請求數(正如您鏈接的文章指出的那樣),則通過普通HTTP發送GET請求是可以的。事情發生變化用戶可以提交內容。無論如何,我認爲發送POST請求並不比發送GET請求更困難,而且在提交數據時它的語義更準確。對於HTTPS,我不認爲,如果你是擔心被竊聽它是可以避免的,而且它並不需要專家來嗅探不安全或WEP保護WIFI;) – serans 2012-03-20 17:45:12

+0

的幫助好的謝謝! – bottleboot 2012-03-25 21:05:39

1

我個人在多個商業項目中使用類似的API認證方法。
到目前爲止,我從來沒有遇到安全問題,但我使用了一種稍微不同的方法。

我要做的不同:
一)API調用使用用戶ID /登錄以及API密鑰。
b)API密鑰是用戶密碼的鹽味md5哈希(您可以添加用戶標識和別的東西鹽)
這意味着人們不太可能試圖「猜測」API密鑰,也可以更輕鬆地查看誰在您的日誌中使用您的API(無需查看API密鑰)。
而用戶可以通過更改密碼改變自己的API密鑰,所以,如果他們認爲API憑證可能已經被泄露,然後他們可以改變它。

關於GET/POST:如果您的用戶不(通過將其包括在自己的工具/腳本/代碼例如)使用API​​自理然後我會使用POST作爲瑟朗建議。
但是,POST有幾個缺點,使用起來並不「容易」。它只需要更多的工作來實施。
所以我會提供GET和POST,只是添加一個關於可能的安全問題的說明。

+0

感謝您的回答和建議!如果我仍然可以使用GET,我會很高興。我真的想要一個簡單的API,昨天剛剛開始的人可以理解。 你使用https嗎? 雖然我不打算將鹹味密碼用作API密鑰,但這似乎非常不安全。 API密鑰是分開的。在我自己的應用程序中,我可以嘗試一切我可以向用戶解釋這個過程,並提供如何進行鹽和調用的代碼示例。 – bottleboot 2012-03-19 12:10:03

+0

我提供https,但不強制它,它使開發人員往往更復雜。 正如你所說:如果人們應該使用它,基於GET的API是你能夠提供的最簡單的事情之一,事情就必須簡單。 使用修改過密碼的API密鑰,如果你的代碼和環境是可信的和非共享不應該是一個真正的風險,否則你當然應該保存,這不是涉及到的密碼(例如開放源代碼等)單獨的密鑰。 您可以爲您的用戶提供一個API日誌文件作爲額外的安全性,以便他們可以驗證沒有其他人使用他們的API。 – John 2012-03-20 12:08:03

+0

非常感謝您的幫助! – bottleboot 2012-03-25 21:05:59