ruby-on-rails - 在 Rails 4 中通过隐藏标签传递参数是否安全?

标签 ruby-on-rails security

我刚刚开始学习 Rails 并尝试制作我的第一个应用程序。 只是想知道是否可以使用这样的结构

      <%= form_tag create_message_path, :method => :post do %>
          <%= text_area_tag "message", nil %>
          <%= hidden_field_tag "receiver", @order.printer.user.id %>
          <%= hidden_field_tag "order_id", @order.id %>
          <%= submit_tag "Submit" %>
      <% end %>

和基本的强参数。

class MessagesController < ApplicationController
  before_action :correct_user, only: [:update, :destroy]

  def create
    if current_user
      @message = current_user.messages.build(message_params)

      if @message.save
        flash[:success] = "Сообщение создано"
        redirect_to :back
      else
        redirect_to :back
      end
    else
      redirect_to login_path
    end
  end


  private
    def message_params
      params.permit(:message, :read, :receiver, :user_id, :printer_id, :order_id )
    end
    def correct_user
      @message = current_user.messages.find_by(id: params[:id])
      redirect_to root_url if @message.nil?
    end

end

这不是线程吗?用户可以更改 html 输入值并发送一些信息(例如要发送给其他订单的消息)吗?

编辑 1:

  @order = Order.find(params[:id])
  message_item = {
    user_id: current_user.id,
    receiver: @order.printer.user.id,
    message: params[:message],
    order_id: @order.id
  }

  @message = current_user.messages.build(message_item)

最佳答案

首先,隐藏的参数是可以改变的,它们对任何敏感信息都不利。

其次,从您的 message_params 方法中删除这些参数。您不想在参数散列中允许它们(不应允许不在您的表单上的参数):

params.permit(:message, :read)

此外,您可能还想删除 :read,因为您很可能会在其他 Controller 操作中设置它。

第三,您通过赋值设置这些参数:

@message = current_user.messages.build(message_params)
@message.receiver = @order.printer.user.id
@message.order_id = @order.id

注意,你不需要写@message.user_id = current_user.id 因为它将由 Rails 为您完成。

关于ruby-on-rails - 在 Rails 4 中通过隐藏标签传递参数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383205/

相关文章:

ruby-on-rails - CartsController 中的 NoMethodError#destroy - 使用 Rails 4 进行敏捷 Web 开发

java - 将 java 远程调试器端口公开到 Internet 是否安全?

Flash Builder 4 安全错误访问 url 目标 : DefaultHTTP

asp.net-mvc - ASP.Net MVC 和 WebAPI 加密

ruby-on-rails - 使用 :attr_accessible with role-based authorization

ruby-on-rails - 无法在 Ubuntu Server 18.04 上安装 Phusion Passenger

javascript - Heroku 路由错误 rails css/javascript 未加载

ruby-on-rails - Rails 中哪个配置文件优先 - config/application.rb 或 config/environments/#{RAILS_ENV}.rb?

php - php fileinfo 是否足以防止上传恶意文件?

c++ - 如何确定进程的完整性级别?