可能 SQL 在控制器中注入

Possible SQL injection in a controller

我在 Ruby 中有这段代码,我相信它可能是一个 SQL 注入点

@remaining_mdls = @remaining_mdls&.where("\"#{paginated_params_name}\" > ?", paginated_params_val) if paginated_params_val.present?

此方法检查某些对象的可用性,但我认为它可能被用于恶意目的。

这样安全吗?

是的。您正在插入 paginated_params_name。 最简单的解决方法是验证 paginated_params_name 是否包含在已知列的列表中:

ALLOWED_PAGINATED_PARAMS = %w(created_at updated_at ...)

if paginated_params_val.present?
  unless ALLOWED_PAGINATED_PARAMS.include?(paginated_params_name)
    fail "Unknown pagination param '#{paginated_params_name}'" 
  end
  @remaining_mdls = @remaining_mdls&.where("\"#{paginated_params_name}\" > ?", paginated_params_val)
end