如何防止用户在Rails 3中从表单提交中设置敏感字段?

时间:2014-04-03 10:24:52

标签: ruby-on-rails ruby-on-rails-3

我从Rails教程中了解一下"关注用户"。

<%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
  <div><%= f.hidden_field :followed_id %></div>
  <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>

这一行:f.hidden_field :followed_id

在浏览器中生成类似的内容:

<input type="hidden" value="13">

&#39; 13&#39;表示将要关注的用户的ID

也许并非所有的网站用户都精通技术,但有些用户可能会找到一些方法来做一些技巧,例如打开Firebug并简单地编辑html输入标签并使用随机数设置值。

使用户在我的控制器中通过以下方式跟踪其他用户显然快速而简单:

def create
  @user = User.find(params[:relationship][:followed_id])
  current_user.follow!(@user)        
end

另外,我需要访问模型中的属性:

attr_accessible :followed_id

但是,让用户轻易操作这类数据并不是太危险了吗?有没有其他解决方案,而不是像上面的代码那样?

1 个答案:

答案 0 :(得分:0)

你的解决方案很好。如果在任何情况下用户可以以恶意方式篡改数据,则需要进行某种服务器端检查。例如,如果用户可能只关注某些其他用户,那么您需要检查他们是否未篡改该变量以跟随用户他们不允许这样做。这取决于具体情况。

根据经验,来自用户的数据不应被视为值得信赖。始终假设它可能被篡改。但是,如果他们无法以恶意的方式篡改它(即,如果用户可能关注任何其他用户),那么请不要担心。