2012-12-15 89 views
1

我正在開發一個Rails應用程序,它以JSON的形式依賴於很多jQuery AJAX請求到服務器。該應用沒有認證(向公衆開放)。這些請求中的數據對小塊不敏感,但我希望避免外部代理訪問數據或自動執行請求(由於服務器負載和數據本身)。Rails跨域請求安全問題

我理想情況下希望包括某種認證,即只能在同一個域(即我的網站上的客戶端)上使用javascript進行請求,但我不知道如何或如何做到這一點。我也在考慮加密查詢字符串和/或響應。

謝謝。

回答

1

我結束了在請求URL傳遞token=$('meta[name=csrf-token]').attr("content")session[:_csrf_token]控制器比較。

1

你是什麼意思只有你的應用程序應該請求這些JSON?客戶端最終必須觸發事件,否則不會將請求發送到服務器。

看看你的應用程序的任何頁面的源代碼。您將注意到由應用程序控制器中的protect_from_forgery方法生成的真實性令牌 - 來自api:

打開請求防僞保護。請記住只檢查非GET,HTML/JavaScript請求。

默認情況下,這是啓用幷包含在您的應用程序控制器中。

如果你真的需要檢查的請求是否來自你自己的IP,看看這個great question.

+0

謝謝。我的意思是,請求只能由我的網站上的真實客戶端創建,而不能在其他地方(即某人在瀏覽器上鍵入http://myapp.com/rest/request.json?params=blablabla或腳本)。我的問題是所有這些請求都是GET。 – Nicolas

+0

如果只能從您自己的應用程序訪問json,請檢查我提供的第二個鏈接。你只需要知道你的應用服務器的IP地址。 – weltschmerz

+0

我不認爲這就是我正在尋找的,我的意思是請求只能從我的網站上的JavaScript中進行,我編輯了這個問題以說明問題。 – Nicolas

0
def check_api 
    redirect_to root_url, :alert => 'effoff' unless request.host =~ /yourdomain.com/ 
end 

應該工作,檢查您的域名。不知道你需要js部分,但它是一些東西。

1
I want to avoid external agents from having access to the data... because of the server load and because of the data itself. 
  1. 如果你真的擔心安全問題,這個問題的其他細節如何實現一個API密鑰:你不What's the point of a javascript API key when it can be seen to anyone viewing the js code

  2. 你不應該解決的問題還沒有,服務器負載應該不是一個問題,直到它實際上是一個問題。如果您注意到其他代理的負載過重,爲什麼不監視服務器流量並實施此功能?