2011-10-31 56 views
2

我必須爲使用jQuery ajax調用的網站實現內部API。它在JSON上返回數據。阻止對API的外部調用(安全性)

catch:它應該只在從同一個網站調用它時拋出數據。我假設IP不會工作,因爲它在客戶端使用JavaScript調用。

例如,如果有人試圖從另一個域調用json url,它應該會拋出一條錯誤消息。

任何想法?

+1

長話短說:不可能的。取而代之的是使用正確的認證 –

+0

沒有認證:(這是一個開放的結果形式,它通過jQuery Ajax來完成,以避免重新加載頁面 – andufo

+0

爲什麼不檢查域? – elboletaire

回答

4

這裏可能有足夠的一種方法是在用戶加載頁面時從後端提供csrf標記(密鑰)。然後在執行ajax請求時傳遞該令牌以確保用戶使用服務器的網頁。至少對於Django來說,支持內置的csrf標記,對於其他框架也可能是相同的。

注意:這不會使您的數據/ API訪問更加安全,但會使其他網站更難以使用您的API。這不是正確認證的替代方案。

鏈接:

+1

這並沒有完全幫助,因爲攻擊者可以抓住你的頁面來獲取CSRF令牌,然後查詢。CSRF令牌是爲了防止你的*用戶受到攻擊*通過劫持*他的會話*他們不限制對API的訪問 – derobert

+1

@derobert是的,但它可能已經足夠用於某些用例了,正如人們在評論中提到的那樣,沒有au的情況下沒有完美的解決方案。用戶鑑定。至少這會阻止人們使用你的API做混搭。 – Lycha

+1

對於某些用例來說,它可能已經足夠了,但重要的是,任何閱讀答案的人都應該知道它是多麼容易被擊敗。它不負責任的國際海事組織提供安全建議*,沒有*規定其已知(和實質性)弱點。 – derobert