我发现可能的安全弱点,但不知道如何解决它

时间:2016-01-03 17:54:20

标签: ruby-on-rails redis

根本不删除此功能。

我有表单输入,但是在没有重定向的情况下,我没有将验证视图渲染失败,而是将用户重定向到new页面,但是将其输入存储在Redis中,因此不要错误消息和他的实际参赛作品:

  def create_list
     result=super
     if result[:all_records_saved]
      redirect_to program_stream_path(@stream.program, @stream)
     else
      redirect_to new_students_list_stream_path(@stream, :invalid_entry_id=>result[:id])
    end
  end

我将无效条目传递给方法redis_store(添加redis会话)

def redis_store(invalid_entries)
  if $redis.exists("invalid_entries_ids")
    id = $redis.incr("invalid_entries_ids")
  else
    $redis.set("invalid_entries_ids", 0, ex: 600)
    id = 0
  end
  invalid_entries.each do |entry|
    $redis.multi do
      $redis.rpush("invalid_entries_attr:#{id}", entry[0])
      $redis.rpush("invalid_entries_errors:#{id}", entry[1])
      $redis.expire("invalid_entries_attr:#{id}", 600)
      $redis.expire("invalid_entries_errors:#{id}", 600)
    end
  end
  id
end

因此,使用params[:invalid_entry_id]重定向用户,然后其他方法使用此ID从redis获取数据。

问题

我只是明白,如果有人得到这个重定向:

/edit-students-list?invalid_entry_id=1

他可以将其改为

/edit-students-list?invalid_entry_id=0

或者任何小于他实际获得的身份证,并且访问他并不意味着可以访问的数据。

这不是什么大事,但我想避免它而不去除为使这个功能起作用而付出的所有努力。

我注意到Rails flash不需要任何参数或外部指针来找出哪个闪存属于哪个请求。我如何在我的redis store / get函数中实现它?还是其他任何解决方案?

0 个答案:

没有答案