我正在开发一个 Rails 应用程序,它以 JSON 的形式依赖于对服务器的大量 jQuery AJAX 请求。该应用程序没有身份验证(它向公众开放)。这些请求中的数据在小块中不敏感,但我想避免外部代理访问数据或自动请求(因为服务器负载和数据本身)。
理想情况下,我希望包括某种身份验证,即只能从同一域中的javascript(即我的网站上的客户端)发出请求,但我不知道如何或是否可以这样做。我也在考虑加密查询字符串和/或响应。
谢谢你。
我正在开发一个 Rails 应用程序,它以 JSON 的形式依赖于对服务器的大量 jQuery AJAX 请求。该应用程序没有身份验证(它向公众开放)。这些请求中的数据在小块中不敏感,但我想避免外部代理访问数据或自动请求(因为服务器负载和数据本身)。
理想情况下,我希望包括某种身份验证,即只能从同一域中的javascript(即我的网站上的客户端)发出请求,但我不知道如何或是否可以这样做。我也在考虑加密查询字符串和/或响应。
谢谢你。
What do you mean only your app should request these JSONs? A client will eventually have to trigger an event, otherwise no request will be sent to the server.
Look at the source code of any of your app's pages. You will notice an authenticity token, generated by the protect_from_forgery method in your application controller - from the api:
Turn on request forgery protection. Bear in mind that only non-GET, HTML/JavaScript requests are checked.
By default, this is enabled and included in your application controller.
If you really need to check whether a request comes from your own IP, have a look at this great question.
我最终传入token=$('meta[name=csrf-token]').attr("content")
了请求 URL 并session[:_csrf_token]
在控制器中进行了比较。
I want to avoid external agents from having access to the data... because of the server load and because of the data itself.
如果您真的关心安全性,这个其他问题详细说明了如何实现 API 密钥:当任何查看 js 代码的人都可以看到 javascript API 密钥时,它的意义何在
你不应该解决你还没有的问题,服务器负载不应该是一个问题,直到它实际上是一个问题。如果您注意到来自其他代理的负载过多,为什么不监控服务器流量并实施此功能?
def check_api
redirect_to root_url, :alert => 'effoff' unless request.host =~ /yourdomain.com/
end
这应该可以检查您的域。不确定你是否需要 js 部分,但它是一些东西。