yas*_*ngh 6 ruby-on-rails ruby-on-rails-3
在这个应用程序中有四个角色,
角色可以通过编辑url id进入未经授权的页面,并对页面的可用选项执行操作,误导应用程序的故障.
任何人都有这个想法.这是关闭会话或路由permition问题的问题...提前感谢
它与路由无关,您可以使用过滤器自行限制操作访问,即
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 安全指南