【问题标题】:Convert function params to Hash object in Ruby on Rails在 Ruby on Rails 中将函数参数转换为 Hash 对象
【发布时间】:2019-02-28 00:24:10
【问题描述】:

我必须对用 Ruby On Rails 开发的 API 进行更改,如下所示:

class V0::PythonsController < ApplicationController
  skip_before_action :authorize_request

  # POST v0/python/import
  def import
    result = { status: :error }
    data = eval(AwsTool.decrypt(params["code"])).first
    if data.class == Hash
      user = User.find_by(id: data[:ot_user_id])
      activity_type = ActivityType.find_by(id: data[:activity_type])
      if user.nil?
        result[:msg] = "user not found"
      elsif activity_type.nil?
        result[:msg] = "activity type not found"
      else...

我将“代码”参数中的一些数据传递给它,然后对其进行解密和探索。我想添加一个 if 子句,所以当我从不同的来源调用 API 时,不会发生加密和解密。所以我做了这个改变:

class V0::PythonsController < ApplicationController
  skip_before_action :authorize_request

  # POST v0/python/import
  def import
    result = { status: :error }
  if params["origin"] != 'trusted'
    data = eval(AwsTool.decrypt(params["code"])).first
  else
    data = params["code"]
  end
  if data.class == Hash
    user = User.find_by(id: data[:ot_user_id])
    activity_type = ActivityType.find_by(id: data[:activity_type])
    ...

问题在于 data.class 不是一个 Hash 对象,它是一个字符串。我尝试了不同的解决方案来将对象从 String 转换为 Hash,例如 t_hash 和其他类似函数,但它们不起作用。我收到了一些关于参数不被允许的错误,我尝试将许可证添加到它们但仍然失败。

还有什么想法吗?

【问题讨论】:

  • data.class 是什么样的?
  • 如果我尝试p data.class,我会得到字符串
  • 你的params["code"]是什么样的?
  • 如果你只尝试p data会怎样?
  • 大家好,如果我输入p data,结果是这样的:{:ot_user_id=&gt;"3", :query_date_time=&gt;"2019-02-27T22:00:21:848587", :theactivities=&gt;[{:activity_value=&gt;"5500", :activity_date_time=&gt;"2019-02-27"}]}

标签: ruby-on-rails api types parameters applicationcontroller


【解决方案1】:

失败是因为您忘记在代码上调用eval。这样做:

data = eval(params["code"])

顺便说一句,评估输入是非常危险的。我希望你相信使用这个 API 的人。

【讨论】:

  • 谢谢@infused,我刚刚试过这个并且效果很好。 'eval()' 可用于注入恶意代码?还是有其他危险需要考虑?不使用 eval 可能是另一种解决方案吗?
  • 不要使用 eval。这是超级不安全的。不确定您在做什么,但尝试以不同的方式评估代码。或者使用 URL 中的参数调用预定义的方法
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多