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