javascript - 基于 Rails 的 javascript 应用程序的安全性 : How do you verify permissions on a user within rendered javascript?

标签 javascript ruby-on-rails security backbone.js coffeescript

如果这是这个问题的错误堆栈,我们深表歉意。如果是这样,请将我引导至正确的站点。

我有一个 Rails 应用程序,其中用户可以是以下三个 Angular 色之一的成员:useradminsystem .然而,我的 Rails 应用程序基本上用作 Backbone 应用程序的 JSON 后端。所有客户端繁重的工作都是通过 coffeescript 文件完成的,这些文件在 Assets 管道中处理。

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

APP.currentUser = 
  name: "#{@current_user.name}"
  role: "#{@current_user.role}"

在我的主干应用程序的几个地方散布着这样的调用:

if APP.currentUser.role is 'admin'...

这看起来很不安全,因为任何有知识的人都可以打开开发控制台,将 App.currentUser 的实例修改为 admin,然后访问 admin前端的功能。现在,rails 端足够聪明,可以检查并确保 @current_user 可以在尝试执行这些功能之前执行这些功能,但似乎仍然应该有一种方法可以在前端防止这种情况发生结束,而不将 Angular 色发布到 javascript 中。

我是不是过于谨慎了,还是遗漏了什么?

最佳答案

好吧,我不认为你能做得比这更好。在我需要在我的 View 上引入操作权限的情况下,我曾经做过这样的事情。像这样:

在 Rails 后端:

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

在Backbone前端

if(@user.permissions.can_create)
    # Display create view
if(@user.permissions.can_update)
    # Display update view
.....

通常这是您能做的最好的。您不能在前端向用户隐藏 View ,除非整个页面从 Rails 后端加载并处理好 View 权限。当然,这与当今处理基于 Ajax 的 View 的方式相矛盾。

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

关于javascript - 基于 Rails 的 javascript 应用程序的安全性 : How do you verify permissions on a user within rendered javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20384361/

相关文章:

javascript - 是否可以为数字输入框中的小按钮添加事件监听器?

javascript - 数组作为对象对象输出

ruby-on-rails - 如何处理 Rails 应用程序中重用的对象

android - 如何通过android从rails读取base64编码的图片

apache - HTTP 请求和 Apache 模块 : Creative attack vectors

security - Microsoft 是否存储其管理员执行的查询的日志?

javascript - jQuery 中的大型 XML 数据

javascript - 如何使用 Javascript 获取多个对象数组的每种组合

javascript - Turbolinks、Rails、后退按钮、其他来源的页脚

php - # 分钟不活动后自动注销用户