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



我从Rails Tutorial中举一个关于"关注用户"的例子。

<%= 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">

"13"表示将要关注的用户的ID

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

在我的控制器中,让用户通过以下方式跟随另一个用户显然是快速而简单的:

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

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

attr_accessible :followed_id

但是,让这种数据被用户轻易操纵是不是太危险了?除了像上面的代码那样做之外,还有其他解决方案吗?

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

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

相关内容

  • 没有找到相关文章

最新更新