安全性:通过URL编辑和更改可能会滥用定义的角色.在ruby应用程序中

yas*_*ngh 6 ruby-on-rails ruby-on-rails-3

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

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

任何人都有这个想法.这是关闭会话或路由permition问题的问题...提前感谢

ror*_*rra 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
Run Code Online (Sandbox Code Playgroud)

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

def transaction
  @transaction = Transaction.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

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

def transaction
  @transaction = current_user.transactions.find(params[:id])
end 
Run Code Online (Sandbox Code Playgroud)

或任一

def transaction
  @transaction = Transaction.where(user_id: current_user.id, id: params[:id])
end
Run Code Online (Sandbox Code Playgroud)

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

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