我正在开发一个Rails应用程序,它以JSON的形式依赖于对服务器的大量jQuery AJAX请求。该应用程序没有身份验证(它向公众开放)。这些请求中的数据在小块中不敏感,但我想避免外部代理访问数据或自动化请求(因为服务器负载和数据本身)。
理想情况下,我希望包含某种身份验证,只能通过同一域中的javascript(即我网站上的客户端)进行请求,但我不知道如何或者是否可以这样做。我也在考虑加密查询字符串和/或响应。
谢谢。
答案 0 :(得分:1)
您的意思是只有您的应用才能申请这些JSON?客户端最终必须触发事件,否则不会向服务器发送请求。
查看任何应用页面的源代码。您将注意到由应用程序控制器中的protect_from_forgery方法生成的真实性令牌 - 来自api:
打开请求伪造保护。请记住,只检查非GET,HTML / JavaScript请求。
默认情况下,它已启用并包含在您的应用程序控制器中。
如果您确实需要检查请求是否来自您自己的IP,请查看此great question.
答案 1 :(得分:1)
I want to avoid external agents from having access to the data... because of the server load and because of the data itself.
如果您真的关注安全性,那么另一个问题将详细介绍如何实施API密钥:What's the point of a javascript API key when it can be seen to anyone viewing the js code
您不应该解决尚未解决的问题,在实际出现问题之前,服务器负载不应该是一个问题。如果您发现其他代理的负载过多,为什么不监控服务器流量并实现此功能?
答案 2 :(得分:1)
我最终在请求网址中传递了token=$('meta[name=csrf-token]').attr("content")
,并与控制器中的session[:_csrf_token]
进行了比较。
答案 3 :(得分:0)
def check_api
redirect_to root_url, :alert => 'effoff' unless request.host =~ /yourdomain.com/
end
应该可以检查您的域名。不确定你是否需要js部分,但它确实存在。