Ruby on rails Rails控制台是否绕过质量分配保护?

Ruby on rails Rails控制台是否绕过质量分配保护?,ruby-on-rails,ruby-on-rails-5,mass-assignment,Ruby On Rails,Ruby On Rails 5,Mass Assignment,这可能是个愚蠢的问题,但请容忍我 我一直在玩我正在开发的rails应用程序,当时我在控制台中(即,rails c),我决定尝试通过控制台将用户添加到数据库中 我的用户模型具有角色属性,该属性被排除在用户控制器中的强参数列表之外。但是,当我使用控制台时,我可以通过执行update\u attribute来编辑新用户角色的值。这与我有关。这是否意味着我没有正确地执行强参数,并且不知何故没有保护我的用户模型不受批量分配的影响?还是rails控制台有意绕过质量分配?这里是否存在任何安全漏洞 以下是控制台

这可能是个愚蠢的问题,但请容忍我

我一直在玩我正在开发的rails应用程序,当时我在控制台中(即,
rails c
),我决定尝试通过控制台将用户添加到数据库中

我的
用户
模型具有
角色
属性,该属性被排除在
用户控制器
中的强参数列表之外。但是,当我使用控制台时,我可以通过执行
update\u attribute
来编辑新用户角色的值。这与我有关。这是否意味着我没有正确地执行强参数,并且不知何故没有保护我的用户模型不受批量分配的影响?还是rails控制台有意绕过质量分配?这里是否存在任何安全漏洞

以下是控制台输入/输出:

2.3.1 :004 > user.update_attribute("role", "admin")
(0.1ms)  begin transaction
SQL (0.7ms)  UPDATE "users" SET "updated_at" = ?, "role" = ? WHERE  "users"."id" = ?  [["updated_at", "2017-06-21 10:25:34.134203"], ["role", "admin"], ["id", 4]]
(92.1ms)  commit transaction
=> true 
下面是
用户控制器
的相关部分:

def create
    sleep(rand(5))    # random delay; mitigates Brute-Force attacks
    @user = User.new(user_params)

    if @user.save #&& verify_recaptcha(model: @user)
        if @user.update_attribute('role', 'user')
          @user.send_activation_email
          flash[:info] = "Please check your email to activate your account."
          redirect_to root_url

        else
          render 'new'
        end

    else
        render 'new' #Reset the signup page
    end
end

#...

#Defines which fields are permitted/required when making a new user.
def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
先谢谢你

user.update_属性(“角色”、“管理员”)

它与强参数无关。。 这只会生成一个sql查询,正如您在控制台中看到的那样,它会更新记录

强参数用于限制来自视图/客户端的未经许可的参数,并修改记录

就像你的情况一样

您的
用户参数
不包括
角色
,因为您是自己分配的。如果您没有这样做,并且我在请求正文中发送了
角色:“admin”

User.new(params)
如果
验证\u recaptcha(model:@user)
条件失败,将使用户
管理

user.update_属性(“角色”、“管理员”)

它与强参数无关。。 这只会生成一个sql查询,正如您在控制台中看到的那样,它会更新记录

强参数用于限制来自视图/客户端的未经许可的参数,并修改记录

就像你的情况一样

您的
用户参数
不包括
角色
,因为您是自己分配的。如果您没有这样做,并且我在请求正文中发送了
角色:“admin”

User.new(params)

如果
验证_repatcha(model:@user)
条件失败,将使用户
管理
,啊,好的。所以我在控制台上所做的不是恶意用户真正能够复制的东西?除非可能存在SQL注入漏洞或类似性质的漏洞。不客气。只需检查更新的答案,就会发现一个拼写错误:)啊,好的。所以我在控制台上所做的不是恶意用户真正能够复制的东西?除非可能存在SQL注入漏洞或类似性质的漏洞。不客气..只需检查更新的答案,就有一个输入错误:)