6

在这个应用程序中有四个角色,

角色可以通过编辑 url id 进入未经授权的页面,并对页面的可用选项执行操作,从而误导应用程序故障。

任何人都对此有想法。是关闭会话的问题还是路由许可问题...提前谢谢

4

1 回答 1

1

它与路由无关,您可以使用过滤器自己限制操作访问,即

class MyController < ApplicationController
  before_filter :check_access

  def secure_action_a
  end

  def secure_action_b
  end

  private

  def check_access
    case params[:action]
      when 'secure_action_a':
        redirect_to root_path, error: "Not Allowed" unless current_user.role == 'admin'
      when 'secure_action_b':
        redirect_to root_path, error: "Not Allowed" unless current_user.role == 'user'
    end
  end
end

并且在一个动作上,您应该验证用户是否有权访问资源,所以假设您有一个向用户显示交易的操作,并且如果您编写如下代码,他只能看到他的交易:

def transaction
  @transaction = Transaction.find(params[:id])
end

那么你有一个大问题,因为任何人都可以开始写像“http://mywebsite.com/transaction/23”这样的请求并看到交易,因为当前用户没有任何过滤器,所以你通常确保用户拥有资源

def transaction
  @transaction = current_user.transactions.find(params[:id])
end 

def transaction
  @transaction = Transaction.where(user_id: current_user.id, id: params[:id])
end

稍后您可以使用cancan等高级 gem来控制对资源的访问

最后,请务必阅读rails 安全指南

于 2012-12-05T11:30:30.247 回答