2012-12-15 90 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. 你不应该解决的问题还没有,服务器负载应该不是一个问题,直到它实际上是一个问题。如果您注意到其他代理的负载过重,为什么不监视服务器流量并实施此功能?