基于Rails的javascript应用程序的安全性:如何在呈现的javascript中验证用户的权限?

基于Rails的javascript应用程序的安全性:如何在呈现的javascript中验证用户的权限?,javascript,ruby-on-rails,security,backbone.js,coffeescript,Javascript,Ruby On Rails,Security,Backbone.js,Coffeescript,如果此问题的堆栈错误,请道歉。如果是,请告诉我正确的地点 我有一个rails应用程序,其中in用户可以是以下三个角色之一的成员:用户、管理员、或系统。然而,我的rails应用程序基本上充当主干应用程序的JSON后端。所有客户端的繁重工作都是通过coffeescript文件完成的,这些文件在资产管道中处理 现在,我正在通过在application.html.slim级别创建的对象将一些用户属性导入javascript。看起来像这样的东西: APP.currentUser = name: "#

如果此问题的堆栈错误,请道歉。如果是,请告诉我正确的地点

我有一个rails应用程序,其中in用户可以是以下三个角色之一的成员:
用户
管理员
、或
系统
。然而,我的rails应用程序基本上充当主干应用程序的JSON后端。所有客户端的繁重工作都是通过coffeescript文件完成的,这些文件在资产管道中处理

现在,我正在通过在
application.html.slim
级别创建的对象将一些用户属性导入javascript。看起来像这样的东西:

APP.currentUser = 
  name: "#{@current_user.name}"
  role: "#{@current_user.role}"
if APP.currentUser.role is 'admin'...
在我的主干应用程序中,有几个地方散布着这样的呼叫:

APP.currentUser = 
  name: "#{@current_user.name}"
  role: "#{@current_user.role}"
if APP.currentUser.role is 'admin'...
这似乎非常不安全,因为任何有知识的人都可以打开开发控制台,将
App.currentUser
的实例修改为
admin
,然后访问前端的管理功能。现在,rails端足够聪明,可以检查并确保
@current_user
可以在尝试执行这些功能之前执行这些功能,但似乎仍然应该有一种方法在前端防止这种情况,而不必将角色发布到javascript中


我是否过于谨慎,或者遗漏了什么?

我不知道你是否遗漏了什么,但我认为没有任何方法可以让你的蛋糕(驻留在一个主干应用程序中的管理员和非管理员UI)也吃掉它(让非管理员安全地无法访问管理员UI)。基本上,你必须在下载管理员界面给确认的管理员和接受这个“开放”之间做出选择。

我不知道你是否遗漏了什么,但我不认为有任何方法可以让你的蛋糕(管理员和非管理员界面驻留在一个主干应用程序中)也吃掉它(使管理员用户界面对非管理员安全地不可访问)。您基本上必须在仅下载管理员用户界面给已确认的管理员和接受此“打开”之间进行选择.

嗯,我认为你做得再好不过了。我过去常常在需要在视图上引入操作权限的情况下做类似的事情。类似这样的事情:

APP.currentUser = 
  name: "#{@current_user.name}"
  role: "#{@current_user.role}"
if APP.currentUser.role is 'admin'...
在Rails后端: 在主干前端 一般来说,这是您所能做的最好的事情。您不能在前端对用户隐藏视图,除非整个页面都是从Rails后端加载的,并且有查看权限。当然,这与当前基于Ajax的视图的处理方式相矛盾


此外,您还需要确保授权Rails后端上的操作。

好吧,我不认为您可以做得比这更好。在需要在我的视图上引入操作权限的情况下,我通常会这样做。类似这样的事情:

APP.currentUser = 
  name: "#{@current_user.name}"
  role: "#{@current_user.role}"
if APP.currentUser.role is 'admin'...
在Rails后端: 在主干前端 一般来说,这是您所能做的最好的事情。您不能在前端对用户隐藏视图,除非整个页面都是从Rails后端加载的,并且有查看权限。当然,这与当前基于Ajax的视图的处理方式相矛盾


此外,您还需要确保授权Rails后端上的操作。

您过于谨慎。用户是否可以在客户端启用“管理”功能根本不重要,只要服务器不允许它做任何事情。您过于谨慎。用户是否可以启用“管理”功能根本不重要只要服务器不让它做任何事情,就可以在客户端进行填充。