我的网址看起来像这样username/project/project_members
用户有很多项目,用户和项目之间通过项目成员之间也有很多很多关系。可以把它想象成github,用户有很多回购,回购有很多合作者作为用户。
现在要创建ProjectMember的新对象,我可以进行批量分配:
ProjectMember.create(user_id: params[:user_id], project_id: @project.id, role: params[:project_member][:role])
或者我能做到:
@project.members << @member
@project.member_project(role: params[:project_member][:role])
正如您所知,在这两种情况下我都需要先找到@project和@member对象。要查找@member,我已经将user_id作为隐藏文件传递,我发现@project和我的url(参见顶部)。我的表格如下:
- @users.each do |user|
= form_tag user_project_project_members_add_path(@project.user, @project) do
= label_tag 'username', user.username
= hidden_field_tag "user_id", user.id
= select('project_member', 'role', roles)
= submit_tag 'Add', :name => nil
这种代码留下了强大的参数无用。即我没有使用它来创建我的新project_member实例。 我是否应该担心我没有使用强对手?我想其中一个黑客可能是我将project_id作为隐藏字段传递。我是否应该向后弯腰才能使用强力的参数?
答案 0 :(得分:0)
导致漏洞的那种质量分配就是在你做的时候:
User.create(params[:user])
然后一个恶意的用户会通过{ user: { name: 'Haxxor', admin: true }}
并且您的整个应用都会遭到入侵。
直到Rails 4,Rails很乐意让你这样做。
这样做没有真正的危险:
ProjectMember.create(
user_id: params[:user_id],
project_id: @project.id,
role: params[:project_member][:role]
)
即使您使用哈希创建ProjectMember,您实际上也是在为每个属性手动分配一个参数。