ROR3:hidden_​​field安全性

时间:2012-10-03 06:17:33

标签: ruby-on-rails security hidden-field

我在_form.html.erb中有这个:

        <%if current_user.role_id == 1 %>

            <div class="combo_box">
                <%= f.label :subscriber %>
                <%= f.collection_select(:user_id, User.all,:id,:name,{:include_blank=>false}, :class => 'styled')  %>
            </div>

            <div class="combo_box">
                <%= f.label :group %>
                <%= f.grouped_collection_select(:group_id, User.all,:support_agent_groups,:name,:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled')  %>
            </div>

            <div class="combo_box">
                <%= f.label :role %>
                <%= f.collection_select(:role_id, Role.all,:id,:name,{:include_blank=>false}, {:class => 'styled'})  %>
            </div>

            <div class="combo_box">
                <%= f.label :subscription %>
                <%= f.collection_select(:subscription_id, Subscription.all,:id,:name, {:prompt => "-- Select a subscription --"}, {:class=>'styled'})    %>
            </div>              

        <% elsif  current_user.role_id == 6  && @user.role_id != 6 %>

            <%= f.hidden_field :user_id, :value => current_user.id %>

            <%= f.hidden_field :subscription_id, :value => current_user.subscription_id %>


            <div class="combo_box">
                <%= f.label :group %>
                <%= f.collection_select(:group_id, SupportAgentGroup.where(:user_id => current_user.id),:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled')  %>
            </div>
            <div class="combo_box">
                <%= f.label :role %>
                <%= f.collection_select(:role_id, Role.where('id <> ?', 1).where('id <> ?', 6),:id,:name,{:include_blank=>false}, {:class => 'styled'})  %>
            </div>

        <% elsif  current_user.role_id == 6 %>

            <%= f.hidden_field :user_id, :value => current_user.id %>
            <%= f.hidden_field :role_id, :value => current_user.role_id %>
            <%= f.hidden_field :subscription_id, :value => current_user.subscription_id %>


            <div class="combo_box">
                <%= f.label :group %>
                <%= f.collection_select(:group_id, SupportAgentGroup.where(:user_id => current_user.id),:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled')  %>
            </div>

        <% else %>

            <%= f.hidden_field :user_id, :value => current_user.user.id %>
            <%= f.hidden_field :group_id, :value => current_user.group_id %>
            <%= f.hidden_field :subscription_id, :value => current_user.user.subscription_id %>
            <%= f.hidden_field :role_id, :value => current_user.role_id %>

        <% end %> 

我可以在浏览器中使用firebug选项查看每个隐藏字段中的值和检查元素上的值

<input id="user_user_id" type="hidden" value="2" name="user[user_id]" />

我可以将值2更改为100/200/....

并且在submint上发布新值100/200/...以保存到db并保存在db中。

我需要检查视图中的所有条件以及控制器中的所有条件以查找合适的默认值..或任何使用hidden_​​filed来修复此安全问题的选项。

感谢您的帮助......

2 个答案:

答案 0 :(得分:2)

不需要传递user_id,您可以从控制器

获取current_user

答案 1 :(得分:1)

正如Amar所​​说,您不需要将用户ID从控制器传递给控制器​​,因为您可以使用会话变量中的current_user方法获取它。

请记住,您无法信任从用户收到的数据,一切都可以伪造。

相关问题