我有两个名为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 %>
我点击了很晚,我可以使用浏览器的检查员更改这些值,因此这是一个安全漏洞。那么如何安全地发送这些参数呢?
答案 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.getutc
和current_user.id
已在您的应用程序中以create
和update
方式提供,因此您无需将这些方法传回去。对于@post.id
,您可以将其存储在new
或edit
方法的会话变量中...
session[post_id] = @post.id
然后在你的create
或`更新方法......
@post_comment.post_id = session[:post_id]