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

 mobiledu2502940393 发布于 2023-02-12 19:22

如果这是这个问题的错误堆栈,请道歉.如果是这样,请指引我到正确的网站.

我有一个Rails应用程序,其中的用户可以是三种角色之一的成员:user,admin,或system.我的rails应用程序基本上用作骨干应用程序的JSON后端.所有客户端繁重的工作都是通过coffeescript文件完成的,这些文件在资产管道中处理.

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

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

在我的主干应用程序的几个地方洒满了这样的调用:

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

这似乎是非常不安全的,因为任何人的知识可以打开一个开发者控制台中,修改的实例App.currentUseradmin,然后访问前端的管理功能.现在,rails侧面足够聪明,可以检查并确保@current_user在尝试这样做之前可以执行这些功能,但似乎应该有一种方法可以在前端阻止它,而不会将角色发布到javascript中.

我是否过于谨慎或遗失了什么?

1 个回答
  • 好吧,我认为你不能比这更好.在我需要对我的视图引入操作权限的情况下,我曾经做过类似的事情.像这样的东西:

    在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
    .....
    

    一般来说,这是你能做的最好的事情.您无法在前端隐藏用户的视图,除非整个页面是从Rails后端加载的,并且具有视图权限.当然,与如何处理基于Ajax的视图相矛盾.

    此外,您需要确保在Rails后端授权操作.

    2023-02-12 19:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有