2013-03-13 174 views
1

我有一個網站,大量使用從jQuery到託管在同一個Web域中的Web服務的JSON調用。許多電話都是從公共頁面發出的,不需要訪問者登錄。保護JSON服務

看來我可以使用Fiddler重播這些JSON調用,這是一個很大的問題,因爲現在惡意用戶可以通過打開我的網站捕獲提琴手跟蹤,然後所有投注都關閉,誰知道他/她可以做。

有沒有一種方法來保護Web服務,所以只有那些從站點頁面創建的JSON調用才被允許在服務器上?我在後端使用ASP.NET MVC。

謝謝。


謝謝大家對本主題的貢獻。我有一個後續問題:

SSL怎麼樣?如果我將所有服務都放在一個由SSL保護的文件夾中,那麼這是否是一個全面解決方案(以犧牲性能爲代價)?謝謝。

+0

我在這裏找到了很好的答案。看一看。 http://stackoverflow.com/questions/9773664/rest-api-token-based-authentication – 2013-03-14 09:06:09

回答

1

答案是否定的。用戶總是可以模擬瀏覽器發出的HTTP請求。所以必須以能夠處理所有異常和惡意嘗試的方式對後端進行編碼。

  1. 對所有請求使用nonce。這可能是棘手的實施,但是可能在我腦海中最重要的事情之一。

  2. 跟蹤用戶代理並取消所有來自非標準瀏覽器的請求。

  3. 檢查介紹人,並確保它是爲預期的頁面或至少未來來自同一個域

  4. 包括跟蹤會話/ cookie變量保持跟蹤

然而,所有的這些事情可以被迴避,所以最好的辦法是讓你的後端系統更安全地處理任何用戶輸入。

+0

對不起,什麼是反彈? – user1044169 2013-03-13 12:38:39

+0

對不起''nonce'。它是您隨每個請求一起發送的唯一令牌,服務器期望此令牌。如果您發送了錯誤的令牌,服務器會使該請求無效 – 2013-03-13 12:41:44

+0

我認爲一個令牌只能使用一次。那麼當一個頁面有多個Ajax調用時會發生什麼? – 2013-03-13 12:45:26

0

我會建議驗證每個JSON服務請求。 Ex-通過access_token

每個服務請求必須根據用戶訪問進行驗證。他有權訪問此服務/數據嗎?

同樣的事情應該爲來賓用戶完成。只有有限的服務/數據應該暴露給訪客用戶。

從Facebook API獲取靈感。

0

有多種方法來檢查JSON調用的區分有效性和每個給你安全的多級:

  • 檢查Referer HTTP報頭包含您的網站的網址。這爲您提供基本的安全性,因此您的電話將無法通過小提琴訪問常規用戶,例如
  • 如果JSON的內容是在服務器端生成的,那麼您可以簽署json內容,以便只接受那些電話你以前在服務器端生成過。例如,查看JSON Web Token(JWT)。
  • 如果服務器端沒有生成JSON內容,您仍然可以發出一次必須出現在每個JSON調用中的「票據」。您必須在服務器端檢查票證的有效性,並且票證僅使用一次。
+0

如果你已經完全閱讀我的答案,那麼你會注意到,我說它只能阻止普通用戶訪問,例如,通過小提琴的腳本。這大部分時間都足夠了,這取決於實際情況。在我的回答中,我解釋得很清楚,我認爲沒有理由爲此付出代價。 – Tamas 2013-03-13 12:51:12

0

關於後續問題:

SSL只能保證在瀏覽器和服務器之間的連接,即沒有人可以檢查兩者之間的通信。 (例如,中間的一個人可能會改變呼叫的內容。)它不會阻止攻擊者發起他自己的JSON調用。不同之處在於他的電話是加密的,除了您的服務器之外,其他任何人都無法檢查他的電話。