Rails将额外的参数传递给请求而不使用hidden_​​field标记

时间:2016-10-03 22:02:05

标签: ruby-on-rails form-helpers

我有两个名为Post和PostComment的模型。 目前,我使用hidden_field表单助手发送额外数据,如发布时间,评论海报的用户ID以及发布评论的帖子ID,如下所示:

<%= f.hidden_field :posttime, value: Time.now.getutc %>
<%= f.hidden_field :post_id, value: @post.id %>
<%= f.hidden_field :user_id, value: current_user.id %>

我点击了很晚,我可以使用浏览器的检查员更改这些值,因此这是一个安全漏洞。那么如何安全地发送这些参数呢?

2 个答案:

答案 0 :(得分:1)

通常这些值不会通过表单传递,但可以使用嵌套URL通过URL访问(请参阅此处:http://guides.rubyonrails.org/routing.html

例如,要使用post_id形式的网址,您可以设置评论路线以包含帖子,例如您拥有new_post_comment_path,并且在您的控制器中您可以访问{{ 1}}没有通过表格。

你的表格会变成这样:

params[:post_id]

re:<% form_for [@post, Comment.new] do |f| %> ... - 绝对不能以表格形式通过,你是非常正确的,这是一个很大的安全问题(人们可以为其他人添加评论!)只需访问它通过控制器中的身份验证方法(即user_id)。

你最终会在你的控制器中得到类似的东西,例如:

current_user

答案 1 :(得分:1)

Time.now.getutccurrent_user.id已在您的应用程序中以createupdate方式提供,因此您无需将这些方法传回去。对于@post.id,您可以将其存储在newedit方法的会话变量中...

session[post_id] = @post.id

然后在你的create或`更新方法......

@post_comment.post_id = session[:post_id]