2012-07-10 34 views
0

我正在構建一個只允許通過域名訪問的API(PHP),應該如何檢查JSONP請求源?
有沒有我可以實現的任何安全層? (我不使用鑰匙目前*)只檢查域的安全API(JSONP)


* = 我希望用戶只添加腳本標籤,我不希望他們有插入鑰匙並獲得搞砸了 - 如果你有任何想法爲了做到這一點,並保證它,我會很高興聽到它。

回答

1

的,你會得到最好的是:

接受請求,如果referer頭部丟失或設置爲包含白名單中的網域的網址。

這會阻止人們有效地在HTTP網站上使用您的API客戶端。

某些(相對較少的)用戶將禁用引用者。他們將能夠在任何使用它的站點上使用API​​(但由於它們是少數用戶,大多數站點不希望依賴這個API,因爲它只會爲大多數用戶中斷)。

它不會阻止運行HTTPS網站和使用API​​的用戶 - 但他們的用戶會收到關於混合安全和不安全內容的警告,因此這也是一個沒有吸引力的選項。

這不會阻止用戶訪問您的API服務器端,但您可以通過基於IP的速率限制來解決這個問題。

+0

感謝您的回覆。所以我會試着總結一下你所說的(如果我錯了,就糾正我):檢查引用者(我可以用document.URL發送url來確保我有一些數據),然後檢查從一個IP過度使用api並阻止他(如果它發生的話)。您還提到https網站會收到通知,我應該如何解決該問題(通知)? – funerr 2012-07-10 14:09:25

+0

如果您編寫JS來發送已加載JS的頁面的URI,那麼它可以由頁面作者修改並進行欺騙。我建議使用瀏覽器設置的引用標頭。 – Quentin 2012-07-10 14:11:14

+0

是的,通過檢查給定時間段內給定URI的請求數來使用速率限制。 – Quentin 2012-07-10 14:11:41

1

還有就是,起源可以欺騙......這樣做的沒有安全的方式

+0

如果我會起訴CORS並製作一個允許的起源名單,它會使它更安全嗎? – funerr 2012-07-10 12:39:26

+0

@ agam360 - 不,JSONP的要點是完全繞過相同的原產地策略。 CORS通過它打開一個狹窄的通道(如果你完全在它周圍走動,這是毫無意義的)。 – Quentin 2012-07-10 12:45:16

+0

永遠不要使用Origin Header作爲驗證的手段,這可以隨時更改。服務器端的IP規則或使用限制的API密鑰可能是您最好的選擇 – Manatok 2012-07-10 12:49:09