Kev*_*ker 1 javascript security ruby-on-rails coffeescript backbone.js
如果这是这个问题的错误堆栈,请道歉.如果是这样,请指引我到正确的网站.
我有一个Rails应用程序,其中的用户可以是三种角色之一的成员:user,admin,或system.我的rails应用程序基本上用作骨干应用程序的JSON后端.所有客户端繁重的工作都是通过coffeescript文件完成的,这些文件在资产管道中处理.
现在,我通过我在application.html.slim关卡中创建的对象将一些用户属性传递到javascript中.看起来像这样的东西:
APP.currentUser =
name: "#{@current_user.name}"
role: "#{@current_user.role}"
Run Code Online (Sandbox Code Playgroud)
在我的主干应用程序的几个地方洒满了这样的调用:
if APP.currentUser.role is 'admin'...
Run Code Online (Sandbox Code Playgroud)
这似乎是非常不安全的,因为任何人的知识可以打开一个开发者控制台中,修改的实例App.currentUser是admin,然后访问前端的管理功能.现在,rails侧面足够聪明,可以检查并确保@current_user在尝试这样做之前可以执行这些功能,但似乎应该有一种方法可以在前端阻止它,而不会将角色发布到javascript中.
我是否过于谨慎或遗失了什么?
好吧,我认为你不能比这更好.在我需要对我的视图引入操作权限的情况下,我曾经做过类似的事情.像这样的东西:
def as_json(options={})
super(:include => {
:attributes_to_include
}
).merge({
:permissions=> {
:can_create => (user.can_create?),
:can_delete => (user.can_delete?),
:can_update => (user.can_update?)
}
})
end
Run Code Online (Sandbox Code Playgroud)
if(@user.permissions.can_create)
# Display create view
if(@user.permissions.can_update)
# Display update view
.....
Run Code Online (Sandbox Code Playgroud)
一般来说,这是你能做的最好的事情.您无法在前端隐藏用户的视图,除非整个页面是从Rails后端加载的,并且具有视图权限.当然,与如何处理基于Ajax的视图相矛盾.
此外,您需要确保在Rails后端授权操作.